0

修改其中的值时,我的 DataGrid 的值似乎没有更新。

我努力了:

  1. 将模式设置为TwoWay
  2. 使用BindableCollection(来自 Caliburn.Micro)
  3. 使用ObservableCollection
  4. 用一个List
  5. 合并QuotationViewModel_TableViewModel
  6. 添加Work和删​​除项目
  7. x:Name="Work"在 DataGrid 中使用而不是 ItemsSource

表视图模型.cs

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

表视图.xaml

<!--Total-->
<ContentControl Grid.Column="1"
                cal:View.Model="{Binding Path=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));
    }
}

报价单视图.xaml

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

存储库:https ://github.com/hizamakura/Furniture

这个gif 中可以看出,当我双击它时,值会更新,它应该更新而无需双击它。我知道绑定是正确的,因为当我更新 Value 时,比如Millingto 0.20Total将会更改为20%Mahogany。

4

1 回答 1

0

BindableCollection每当我想更新它时,我都会转向创建一个新的。

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

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

上次CalculateQuotations只是对同一个对象进行操作的方法,因此没有再次设置属性,只是更改了里面的属性。即属性仍然是同一个对象。即使我OnPropertyChanged(nameof(Work))明确调用它也没有修复它,但这会放置一个新对象并更新所有内容。

于 2019-07-09T10:16:21.877 回答