我已經刪除了我以前的答案,因爲使用模板選擇器是一個更好的方法。
首先,我創建了一個DataTemplateSelector類,可以根據綁定在DataTemplates之間進行切換,請注意參考將應用的樣式的2個屬性,我可以在這裏使用find資源,但我認爲這是更清潔,不需要視圖設計師堅持使用硬編碼模板鍵。
public class IsWashedStyleSelector : DataTemplateSelector
{
public DataTemplate TrueStyle { get; set; }
public DataTemplate FalseStyle { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
TestClass targetItem = item as TestClass;
if (targetItem != null)
{
return targetItem.IsWashed ? TrueStyle : FalseStyle;
}
return base.SelectTemplate(item, container);
}
}
我們使用這個模板選擇我不得不定義2數據模板,也可以例如在XAML資源的選擇。
<DataTemplate x:Key="styleIsWashedTrue">
<Button>It's true</Button>
</DataTemplate>
<DataTemplate x:Key="styleIsWashedFalse">
<Label>is false</Label>
</DataTemplate>
<local:IsWashedStyleSelector x:Key="isWashedStyleSelector" TrueStyle="{StaticResource styleIsWashedTrue}" FalseStyle="{StaticResource styleIsWashedFalse}"/>
最後選擇器可以在像這樣一個DataGridTemplateColumn使用。
<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{Binding IsWashed}"/>
<DataGridTextColumn Binding="{Binding Text}"/>
<DataGridTemplateColumn CellTemplateSelector="{StaticResource isWashedStyleSelector}"/>
</DataGrid.Columns>
</DataGrid>
謝謝安迪,這看起來不錯。我現在會研究它。 –