Я пытаюсь обновить данные в 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()
должен включаться каждый раз, когда вы меняете