使用WPF DataGrid我需要根據相關值更改DataGridCell的各種顯示和相關屬性 - 例如Foreground,FontStyle,IsEnabled等 - 單元格對象屬性。將單元格對象的屬性綁定到WPF DataGrid中的DataGridCell中
現在,這是很容易的代碼來執行,例如(使用ObservableDictionaries的觀察集合):
var b = new Binding("IsLocked") { Source = row[column], Converter = new BoolToFontStyleConverter() };
cell.SetBinding(Control.FontStyleProperty, b);
和工作正常,但我看不出如何做到這一點的XAML,因爲我找不到方法將路徑設置爲單元格對象的屬性。
一個XAML的嘗試是:
<Setter Property="FontStyle">
<Setter.Value>
<MultiBinding Converter="{StaticResource IsLockedToFontStyleConverter}" Mode="OneWay" UpdateSourceTrigger="PropertyChanged">
<Binding />
<Binding RelativeSource="{x:Static RelativeSource.Self}"/>
</MultiBinding>
</Setter.Value>
</Setter>
但沒有結合到IsLocked財產
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
var row = (RowViewModel) values[0];
var cell = (DataGridCell) values[1];
if (cell != null && row != null)
{
var column = DataGridMethods.GetColumn(cell);
return row[column].IsLocked ? "Italic" : "Normal";
}
return DependencyProperty.UnsetValue;
}
請注意,以前的版本返回行[山口] .IsLocked和使用DataTrigger設置FontStyle,但返回的對象不是數據綁定。
請注意,當然,應用程序不知道在設計時列是什麼。
最後DataTable對於我的需求來說效率太低了,但是我很想看看DataTables是如何完成的,如果有這樣的解決方案,這可能對別處有用(儘管我更喜歡使用集合)。
當然,這是一個常見問題,我是一個WPF noobie嘗試在我的項目中使用所有MVVM,但是這個問題阻礙了我使用WPF DataGrid。
感謝您的分享。這是非常醜陋的,但這也是迄今爲止我所見過的最簡單的解決方案... – David 2011-02-07 08:42:08
我意識到這是一箇舊的帖子,但我發現我可以簡單地把'return row [column];'在if ...塊中,它工作。上面的代碼做了什麼不同(即創建綁定)? – 2013-02-13 14:51:23
除了在轉換器中,綁定不會發生。如果您不在轉換器內進行綁定並返回行[column],然後更新引用的單元格,則它未綁定,並且您在DataGrid中看不到更新。雖然XAML更復雜,但我有一個更好的和非常好的解決方案。當我有時間時,我會在這裏添加它。 – Martino 2013-06-07 08:19:23