テンプレートセレクターを使用する方がはるかに優れているため、以前の回答を削除しました。
最初に、バインディングに基づいて DataTemplate を切り替えるために使用できる DataTemplateSelector クラスを作成します。適用されるスタイルへの参照を取り込む 2 つのプロパティに注意してください。ここでリソースの検索を使用することもできましたが、これはよりクリーンでありません。ビュー デザイナーがハード コーディングされたテンプレート キーに固執する必要はありません。
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>