Обновить DataGrid, связанный с BindingList - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь обновить данные в DataGrid. Это связано с BindingList. Я попытался начать с ObservableCollection, но не смог обновить обновленные данные. Мне нужна опция, когда я изменяю значение в данной строке, остальные зависят от других и должны обновляться автоматически.

Код ниже не работает, как задумано. Я что-то забыл?

ViewModel

public class MainWindowViewModel : INotifyPropertyChanged
{
    public BindingList<Connector> _connectors;

    public BindingList<Connector> CONNECTORS
    {
        get { return _connectors; }
        set
        {
            _connectors = value;
            OnPropertyChanged("");
        }
    }

    private MainWindowViewModel()
    {
        CONNECTORS = new BindingList<Connector>();
        CONNECTORS.RaiseListChangedEvents = true;
        CONNECTORS.AllowNew = true;
        CONNECTORS.AllowRemove = true;
        CONNECTORS.AllowEdit = true;

        CONNECTORS.Add(new Connector { ID = 1, X = 0, MoveX = 0 });

        CONNECTORS.AddingNew += (e, v) => AddConnector();
        CONNECTORS.ListChanged += (e, v) => UpdateConnectors();
    }

    void AddConnector()
    {
        Console.WriteLine("Added");
    }

    void UpdateConnectors()
    {
        Console.WriteLine("Updated");
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

1008 * XAML *

<DataGrid Width="200" Margin="0 8 0 0" ItemsSource="{Binding CONNECTORS, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" CanUserSortColumns="True" CanUserDeleteRows="True" CanUserAddRows="True" AutoGenerateColumns="False" materialDesign:DataGridAssist.CellPadding="13 8 8 8" materialDesign:DataGridAssist.ColumnHeaderPadding="8">
                            <DataGrid.Columns>
                                <materialDesign:MaterialDataGridTextColumn Binding="{Binding ID}" Header="Id" IsReadOnly="True" EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnPopupEditingStyle}" />
                                <materialDesign:MaterialDataGridTextColumn Binding="{Binding X, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Header="X" EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnPopupEditingStyle}" />
                                <materialDesign:MaterialDataGridTextColumn Binding="{Binding MoveX, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Header="Move X" EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnPopupEditingStyle}" />
                            </DataGrid.Columns>
                        </DataGrid>

Оба метода (AddConnector() и UpdateConnectors()) вызывают только при добавлении новой строки.

UpdateConnectors() должен включаться каждый раз, когда вы меняете

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