2011-10-08 72 views
0

作为标题,我想启用一个按钮(已禁用),当从DataGrid(如此一个对象)的行被选中。使用Expression Blend在DataGrid中选择行时启用按钮?

从我看的,WPF似乎有触发器检查时centain属性改变它可以做centain的东西吗?

但在Silverlight中,似乎我只能使用GoToState。我试图做出两个状态:Selected和UnSelected。但是它的按钮的IsEnabled属性它似乎不是从UnSelected状态到Selected状态的记录...

另一个问题是适合DataGrid的唯一事件是SelectionChanged,但是如何确保用户能够选择了一个行?

如果我在代码中做了所有事情,我可以检查SelectionChangedEvent并启用按钮,但无论如何要用Expression Blend完成以上所有操作?我试图尽可能将所有内容放在xaml中。

谢谢

回答

1

你试过使用普通的元素绑定?例如:

<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(); 
    } 
} 

所有您需要做的就是申报转换器在任何页面或按钮的静态资源。

+0

Oo,我明白了。那么表达式混合不支持原生做这样的事情?我的意思是没有写入转换器或代码? –

+0

@King,我不是Expression Pro,我直接在VS中完成所有的XAML(所以我不能说Expression是否有这个能力)。你也许可以用DataTrigger或某种行为来做到这一点,我只是展示了实现你想要的最快捷的方法。无论如何,您必须使用转换器或表达式,因为SelectedItem中对象的存在或缺少需要等同于布尔值。 – slugster

+0

我明白了,谢谢:) –