我有一个数据网格,可观察的集合绑定到它:
private ObservableCollection<RequestParameter> _parameters = new ObservableCollection<RequestParameter>();
public ObservableCollection<RequestParameter> Parameters
{
get { return _parameters; }
set { Set(ref _parameters, value); }
}
private bool _isPostRequest;
public bool IsPostRequest
{
get { return _isPostRequest; }
set { Set(ref _isPostRequest, value); }
}
模特:
public class RequestParameter
{
public string Key { get; set; }
public string Value { get; set; }
public bool IsPostParameter { get; set; }
}
所以在用户界面上,我有一个复选框和一个数据网格
<DataGrid HeadersVisibility="Column" RowHeaderWidth="0" Grid.Row="2" Grid.ColumnSpan="2" ItemsSource="{Binding Parameters}" CanUserAddRows="True" AutoGenerateColumns="False" CanUserDeleteRows="True" MinHeight="140">
<DataGrid.Columns>
<DataGridTextColumn Header="Key" Binding="{Binding Key}" Width="*"/>
<DataGridTextColumn Header="Value" Binding="{Binding Value}" Width="*"/>
</DataGrid.Columns>
</DataGrid>
<CheckBox HorizontalAlignment="Right" IsChecked="{Binding IsPostRequest}"/>
因此,如果单击该复选框,则集合中所有项目的IsPostParameter
应设置为True
。
我能想到的唯一方法是在Parameters
字段的getter或setter中,检查viewmodel的IsPostRequest
属性,如果是,则运行所有参数并设置旗。
有没有更好的解决方案?
答案 0 :(得分:1)
向视图模型添加一个Command,并将CheckBox命令属性设置为该命令。并将IsChecked作为参数传递:CommandParameter="{Binding IsChecked, RelativeSource={RelativeSource Self}, Mode=OneWay}
然后在您的命令中迭代您的集合项并将您的字段设置为适当的值。
答案 1 :(得分:1)
我认为你可以通过IsPostRequest setter属性检查它
private bool _isPostRequest;
public bool IsPostRequest
{
get { return _isPostRequest; }
set
{
_isPostRequest = value;
Parameters.ToList().ForEach(x => x.IsPostParameter = value);
RaisePropertyChanged("IsPostRequest");
}
}