使用Expression Blend在DataGrid中选择行时启用按钮?
问题描述:
作为标题,我想启用一个按钮(已禁用),当从DataGrid(如此一个对象)的行被选中。使用Expression Blend在DataGrid中选择行时启用按钮?
从我看的,WPF似乎有触发器检查时centain属性改变它可以做centain的东西吗?
但在Silverlight中,似乎我只能使用GoToState。我试图做出两个状态:Selected和UnSelected。但是它的按钮的IsEnabled属性它似乎不是从UnSelected状态到Selected状态的记录...
另一个问题是适合DataGrid的唯一事件是SelectionChanged,但是如何确保用户能够选择了一个行?
如果我在代码中做了所有事情,我可以检查SelectionChangedEvent并启用按钮,但无论如何要用Expression Blend完成以上所有操作?我试图尽可能将所有内容放在xaml中。
谢谢
答
你试过使用普通的元素绑定?例如:
<DataGrid x:Name="MyGrid" />
<Button IsEnabled="{Binding Path=SelectedItem, ElementName=MyGrid, Converter={StaticResource MyNullToBoolConverter}}" />
和转换器的一个例子:
class MyNullToBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value != null ? true : false;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
所有您需要做的就是申报转换器在任何页面或按钮的静态资源。
Oo,我明白了。那么表达式混合不支持原生做这样的事情?我的意思是没有写入转换器或代码? –
@King,我不是Expression Pro,我直接在VS中完成所有的XAML(所以我不能说Expression是否有这个能力)。你也许可以用DataTrigger或某种行为来做到这一点,我只是展示了实现你想要的最快捷的方法。无论如何,您必须使用转换器或表达式,因为SelectedItem中对象的存在或缺少需要等同于布尔值。 – slugster
我明白了,谢谢:) –