Обновить состояние флажка DataGrid по свойству, которое зависит от другого свойства - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть модель, которая содержит CanDrawProperty. Я хочу привязать это свойство к свойству IsEnabled DataGrid CheckBox:

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);
    }
}

Я хочу обновить состояние IsEnabled Datagrid CheckBox на основе свойства CanDrawPlot этой модели. Но это не похоже на работу. XAML для DataGrid:

                    <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>

У меня есть класс User. Он содержит 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);
    }
}

1 Ответ

1 голос
/ 18 февраля 2020

Вам нужно добавить следующие строки в свой код

В xaml: Вам необходимо добавить для привязки UpdateSourceTrigger

<CheckBox IsEnabled="{Binding CanDrawPlot,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Checked="ChooseSeries_Checked" x:Name="ChooseSeries" Height="25"/>

А в xaml.cs вам нужно создать экземпляр класса Series

Например:

private Series series = new Series ();

И в конструкторе xaml.cs вам нужно написать:

DataContext = series;

Успешно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...