C# 根据依赖于其他属性的属性更新DataGrid复选框状态

C# 根据依赖于其他属性的属性更新DataGrid复选框状态,c#,wpf,checkbox,binding,C#,Wpf,Checkbox,Binding,我有一个模型,它包含CanDrawProperty。我想将此属性绑定到DataGrid的IsEnabled属性复选框: public class Series : INotifyPropertyChanged { private ObservableCollection<DropPhoto> _dropPhotosSeries; public ObservableCollection<DropPhoto> DropPhotosSeries {

我有一个模型,它包含CanDrawProperty。我想将此属性绑定到DataGrid的IsEnabled属性复选框:

public class Series : INotifyPropertyChanged
{
    private ObservableCollection<DropPhoto> _dropPhotosSeries;
    public ObservableCollection<DropPhoto> DropPhotosSeries
    {
        get
        {
            return _dropPhotosSeries;
        }
        set
        {
            _dropPhotosSeries = value;
            OnPropertyChanged(new PropertyChangedEventArgs("DropPhotosSeries"));
        }
    }

    private bool _canDrawPlot;
    public bool CanDrawPlot
    {
        get
        {
            if (_dropPhotosSeries?.Where(x => x.Drop.RadiusInMeters != null).ToList().Count > 1)
            {
                _canDrawPlot = true;
                return _canDrawPlot;
            }

            _canDrawPlot = false;
            return _canDrawPlot;
        }
        set
        {
            _canDrawPlot = value;
            OnPropertyChanged(new PropertyChangedEventArgs("CanDrawPlot"));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        PropertyChanged?.Invoke(this, e);
    }
}
我想根据此模型的CanDrawPlot属性更新我的Datagrid复选框IsEnabled状态。但这似乎不起作用。DataGrid的XAML:

                    <DataGrid IsReadOnly="True" AutoGenerateColumns="False" SelectionMode="Single" Margin="0" BorderThickness="0" ClipToBounds="True" ItemsSource="{Binding User.UserSeries}" SelectionChanged="SeriesDataGrid_OnSelectionChanged" Name="SeriesDataGrid">
                        <DataGrid.Columns>
                            <DataGridTemplateColumn CanUserResize="False">
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <CheckBox IsEnabled="{Binding CanDrawPlot}" Checked="ChooseSeries_Checked" x:Name="ChooseSeries" Height="25"/>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>
                        </DataGrid.Columns>
                    </DataGrid>
我有一个类用户。它包含UserSeries。UserSeries具有属性CanDrawPlot:

public class User : INotifyPropertyChanged
{
    private ObservableCollection<Series> _userSeries;
    public ObservableCollection<Series> UserSeries
    {
        get
        {
            return _userSeries;
        }
        set
        {
            _userSeries = value;
            OnPropertyChanged(new PropertyChangedEventArgs("UserSeries"));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        PropertyChanged?.Invoke(this, e);
    }
}

您需要在代码中添加以下行

在xaml中: 您需要添加到绑定UpdateSourceTrigger

<CheckBox IsEnabled="{Binding CanDrawPlot,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Checked="ChooseSeries_Checked" x:Name="ChooseSeries" Height="25"/>
在xaml.cs的构造函数中,您需要编写:

DataContext = series;

成功。

User.UserSeries是Series类的集合吗?另外,为什么要在属性getter中设置_canDrawPlot?是的。它并不表示这个属性无论如何都不应该被设置。我可以在getter中根据条件private bool\u canDrawPlot返回true或false;public bool CanDrawPlot{get{if{dropphotoseries?.Wherex=>x.Drop.RadiusInMeters!=null.ToList.Count>1{return true;}否则{return false;}设置{u canDrawPlot=value;OnPropertyChangednew PropertyChangedEventArgsCanDrawPlot;}}}仍然为空。复选框似乎没有注意到CanDrawPlot属性已更改
DataContext = series;