我目前正在开发一个 WPF 应用程序,该应用程序包含一个包含 3 列的数据网格,其中包含 ToggleButtons,其代码如下
<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();
}
}
应用程序应该这样工作,当单击列中某一行的 ToggleButton 时,该行的Closed
列中的 ToggleButtonChecked
变为可见(即被toggleButtonVisibilityConverter
调用)。此外,当单击列中某一行的 ToggleButton 时,该行的Checked
列中的 ToggleButtonActive
变为可见。并且当未单击相应的 ToggleButtons 时,它们应该隐藏在同一层次结构中。
IsClosedProperty
和是 ViewModel的IsCheckedProperty
布尔属性,分别在单击和切换按钮时设置为Closed
true Checked
。