2011-10-08 75 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

我明白了,謝謝:) –