wpf 根据勾选项生成多个datagrid
时间: 2023-10-07 11:13:44 浏览: 180
可以使用多个DataGrid控件,并根据勾选项的状态来决定哪些DataGrid控件可见。具体实现步骤如下:
1. 在XAML中定义多个DataGrid控件,每个控件需要设置不同的名称和绑定的数据源。
2. 在ViewModel中定义一个布尔类型的属性,用于表示勾选项的状态。例如,可以定义一个名为“IsSelected”的属性。
3. 在XAML中将勾选项的IsChecked属性与ViewModel中定义的IsSelected属性进行绑定。
4. 使用Converter将ViewModel中定义的IsSelected属性转换为Visibility类型的值。如果IsSelected为true,则返回Visibility.Visible,否则返回Visibility.Collapsed。
5. 将每个DataGrid控件的Visibility属性与Converter的返回值进行绑定,这样就可以根据勾选项的状态来控制哪些DataGrid控件可见。
以下是示例代码:
XAML:
```
<StackPanel>
<CheckBox Content="DataGrid1" IsChecked="{Binding IsSelected}" />
<DataGrid Name="dg1" ItemsSource="{Binding Data1}" Visibility="{Binding IsSelected, Converter={StaticResource BoolToVis}}" />
<CheckBox Content="DataGrid2" IsChecked="{Binding IsSelected}" />
<DataGrid Name="dg2" ItemsSource="{Binding Data2}" Visibility="{Binding IsSelected, Converter={StaticResource BoolToVis}}" />
</StackPanel>
```
ViewModel:
```
public class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private bool _isSelected;
public bool IsSelected
{
get { return _isSelected; }
set
{
if (_isSelected != value)
{
_isSelected = value;
OnPropertyChanged(nameof(IsSelected));
}
}
}
public ObservableCollection<Data1Item> Data1 { get; set; }
public ObservableCollection<Data2Item> Data2 { get; set; }
public ViewModel()
{
Data1 = new ObservableCollection<Data1Item>();
Data2 = new ObservableCollection<Data2Item>();
}
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
public class BoolToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
bool val = (bool)value;
return val ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
```
注意,上面的示例代码仅供参考,实际应用中需要根据具体情况进行调整。
阅读全文
相关推荐


















