我相信我所要做的只是「簡單」,所以我可能只是錯過了一些明顯的東西。將DataTrigger綁定到複選框的IsChecked屬性
在一個DataGrid中,我試圖綁定一個CheckBox,這樣當它被選中時,其行的Background顏色將會改變。每行都有一個CheckBox。我基本上實現了自己的select-multiple-rows功能(這是一個產品需求,不要問),而且我還有其他的工作,但是這個視覺指示了選定的行。
我讀過this question但我缺少我的答案是「BooleanPropertyOnObjectBoundToRow」。我也看過this question,並試圖與一個RelativeSource混淆,但沒有運氣。
創建我的網格在我的代碼隱藏,但這裏是我用於行當前的樣式(其中有我DataTrigger定義):
<Style x:Key="MyRowStyle" TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked}" Value="True">
<Setter Property="Background" Value="Blue"/>
</DataTrigger>
</Style.Triggers>
</Style>
現在在我的代碼隱藏,我創造我DataGridTemplateColumn和使用一個工廠來創建我的複選框,並在這裏是我的綁定相關代碼:
Binding checkBinding = new Binding("IsChecked");
checkBinding.Mode = BindingMode.OneWayToSource;
RelativeSource relativeSource = new RelativeSource();
relativeSource.AncestorType = typeof(DataGridRow);
relativeSource.Mode = RelativeSourceMode.FindAncestor;
checkBinding.RelativeSource = relativeSource;
factory.SetBinding(CheckBox.IsCheckedProperty, checkBinding);
什麼可能感興趣的是,我把我的DataGrid的ItemsSource時到DataTable,但我複選框列不在DataTable中有相應的列。我只是單獨添加模板列,也許這種底層存儲的缺乏會影響到這一點?
無論如何,如果您需要更多信息,請讓我知道。謝謝!
難道我的回答幫助呢? – Phil 2012-04-10 18:52:49