2017-02-16 13 views
0

我有四列一個DataGrid:Datagrid的錯誤 - Viemodel屬性不能被填充

enter image description here

Datagrid中通過一個觀察的集合填充。查看模式是:

public class PlanningResult : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
    public double A { get; set; } 
    public double B { get; set; } 
    public double C { get; set; } 
    public double D { get; set; } 
} 

ObservableCollection<PlanningResult> populatePatternData = new ObservableCollection<PlanningResult>(); 
public ObservableCollection<PlanningResult> PopulatePatternData 
{ 
    get { return populatePatternData; } 
    set 
    { 
     populatePatternData = value; 
     base.OnPropertyChanged("StringList"); 
    } 
} 

這裏是要求對我來說: - Column CColumn D除非用戶在Column AColumn B的變化應該有相同的價值觀。在這種情況下,Column D應該變成ColumnA+ColumnB

基於以上條件,我可以在視圖模型變化

​​
  • ,我面對的是,我無法填充columnD爲「initial values = values same as columnC」問題。我如何向列D提供初始值?

  • 當我嘗試通過收集這樣做,我得到一個錯誤:

property D cannot be assigned to -- it is read only

回答

1

添加二傳手到D財產和的二傳手將其值設置AB屬性:

public class PlanningResult : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    private double _a; 
    public double A 
    { 
     get { return _a; } 
     set { _a = value; NotifyPropertyChanged(); D = _a + _b; } 
    } 

    private double _b; 
    public double B 
    { 
     get { return _b; } 
     set { _b = value; NotifyPropertyChanged(); D = _a + _b; } 
    } 

    private double _d; 
    public double D 
    { 
     get { return _d; } 
     set { _d = value; NotifyPropertyChanged(); } 
    } 

    public double C { get; set; } 
} 
+0

thnks。問題的一個變體:當A或B變化時,是否可以調用某個函數? @ mm8 – user7157732

+0

您可以在A和B屬性的setter中調用您想要的任何方法,就像調用NotifyPropertyChanged方法一樣。 – mm8

1

你可以使用另一個字段來存儲AB是否已更改。

private bool hasAorBChanged = false; 

此字段可以一次AB已經改變設置爲true。

private double _a; 
public double A 
{ 
    get { return _a; } 
    set { _a = value; NotifyPropertyChanged(); NotifyPropertyChanged("D"); 
    hasAorBChanged = true;} 
} 

private double _b; 
public double B 
{ 
    get { return _b; } 
    set { _b = value; NotifyPropertyChanged(); NotifyPropertyChanged("D"); 
    hasAorBChanged = true;} 
} 

則該屬性d可能看起來像

public double D { get { return hasAorBChanged ? _a + _b : C; } } 

不是乾淨的解決方案,但考慮到d旨在爲只讀,這應該工作。

編輯:您也可以將hasAorBChanged = true;移動到方法NotifyPropertyChanged()。它會使它變得更乾淨。