除非双击,否则修改源后,DataGrid的值不会更新

时间:2019-07-09 00:19:54

标签: c# wpf datagrid caliburn.micro fody-propertychanged

修改后,我的DataGrid的值似乎没有更新。

我尝试过:

  1. 将模式设置为TwoWay
  2. 使用BindableCollection(来自Caliburn.Micro)
  3. 使用ObservableCollection
  4. 使用List
  5. QuotationViewModelTableViewModel合并
  6. Work中添加项目并将其删除
  7. 在DataGrid中使用x:Name="Work"代替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

this gif中所示,当我双击该值时,该值将更新,它无需双击就可以更新。我知道绑定是正确的,因为当我更新Value时,例如将Milling更改为0.20Total将更改为桃花心木的20%

1 个答案:

答案 0 :(得分:0)

每当我想更新它时,我就开始创建一个新的 a b c 1 1 3 6 2 2 5 9 3 3 3 8 4 4 9 15 5 5 5 12 6 6 13 21

SELECT substring(date_part('year', date)::varchar, 3, 2) AS year, 0 AS zero FROM listvalue;  

SELCT to_char(shipped_date, 'YY'), 0 AS zero from listvalue;

上次BindableCollection只是对同一对象进行操作的一种方法,因此不会再次设置该属性,只更改了内部的属性。即属性仍然是同一对象。 即使我显式调用public BindableCollection<ICanCalculate> Work { get; set; } = App.Config.Work; public void Update() { Work.CalculateQuotations(_tableViewModel.WoodTotal); Work = new BindableCollection<ICanCalculate>(Work); } 也不能解决问题,但这会放置一个新对象并更新所有内容。