Значения DataGrid не обновляются при изменении источника, если не щелкнуть дважды - PullRequest
0 голосов
/ 09 июля 2019

Кажется, значения My DataGrid не обновляются при изменении значений в нем.

Я пробовал:

  1. Установка режима на TwoWay
  2. Использование BindableCollection (от Caliburn.Micro)
  3. Использование ObservableCollection
  4. Использование List
  5. Слияние QuotationViewModel с TableViewModel
  6. Добавление элемента в Work и удаление его
  7. Использование x:Name="Work" в DataGrid вместо ItemsSource

TableViewModel.cs

public class TableViewModel : Screen
{
    [ ... ]
    public QuotationViewModel QuotationViewModel { get; set; }
    public void Update()
    {
        NotifyOfPropertyChange(() => WoodTotal);
        QuotationViewModel.Update();
    }
}

TableView.xaml

<!--Total-->
<ContentControl Grid.Column="1"
                cal:View.Model="{Binding Path=QuotationViewModel}"/>

QuotationViewModel.cs

public class QuotationViewModel : INotifyPropertyChanged
{
    private readonly TableViewModel _tableViewModel;

    public QuotationViewModel(TableViewModel tableViewModel)
    {
        _tableViewModel = tableViewModel;
    }

    public BindableCollection<ICanCalculate> Work { get; set; } = App.Config.Work;

    public void Update()
    {
        QuotationRow.CalculateQuotations(_tableViewModel.WoodTotal);
        OnPropertyChanged(nameof(Work));
    }
}

QuotationView.xaml

<DataGrid ItemsSource="{Binding Path=Work, Mode=TwoWay}" />

Репозиторий: https://github.com/hizamakura/Furniture

Как видно из этого gif, значение обновляется, когда я дважды щелкаю по нему, оно должно обновляться без двойного щелчка по нему. Я знаю, что привязки верны, потому что когда я обновляю значение, скажем, от Milling до 0.20, Total изменится на 20% из красного дерева.

1 Ответ

0 голосов
/ 09 июля 2019

Я только что обратился к созданию нового BindableCollection всякий раз, когда я хочу его обновить.

public BindableCollection<ICanCalculate> Work { get; set; } = App.Config.Work;

public void Update()
{
    Work.CalculateQuotations(_tableViewModel.WoodTotal);
    Work = new BindableCollection<ICanCalculate>(Work);
}

В прошлый раз CalculateQuotations был просто методом, который работает с тем же объектом, поэтому свойство isn 'Если установить снова, изменятся только свойства внутри.т.е. свойство все тот же объект.Даже если я вызываю OnPropertyChanged(nameof(Work)) явно, это не исправляет это, но это ставит новый объект и обновляет все.

...