私は現在、コードが次のようなトグルボタンを含む3列のデータグリッドを含むWPFアプリケーションに取り組んでいます
<DataGridTemplateColumn Header="Closed" Width="60">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ToggleButton>
<ToggleButton.Content>
...
</ToggleButton.Content>
</ToggleButton>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Checked" Width="60">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ToggleButton Visibility="{Binding Path=IsClosedProperty, Converter={StaticResource toggleButtonVisibilityConverter}}">
<ToggleButton.Content>
...
</ToggleButton.Content>
</ToggleButton>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Active" Width="60">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ToggleButton Visibility="{Binding Path=IsCheckedProperty, Converter={StaticResource toggleButtonVisibilityConverter}}">
<ToggleButton.Content>
...
</ToggleButton.Content>
</ToggleButton>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
toggleButtonVisibilityConverter のコードは次のとおりです。
public class ToggleButtonVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value is bool && ((bool)value) ? Visibility.Visible : Visibility.Hidden;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
アプリケーションは、列の行Closed
の ToggleButton がクリックされると、Checked
その行の列の ToggleButton が表示される (つまり、toggleButtonVisibilityConverter
呼び出される) ように動作する必要があります。また、列の行Checked
の ToggleButton をクリックすると、Active
その行の列の ToggleButton が表示されます。また、それぞれの ToggleButton をクリックしないと、同じ階層で非表示になります。
IsClosedProperty
とは ViewModelのIsCheckedProperty
ブール型プロパティで、Closed
とChecked
toggleButtons がそれぞれクリックされたときに true に設定されます。