1
我有這個實體(BaseModel實現INotifyPropertyChanged):綁定到導航屬性不會刷新UI
編輯1:的SetProperty代碼:
protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName] String propertyName = null)
{
if (object.Equals(storage, value)) return false;
storage = value;
this.OnPropertyChanged(propertyName);
return true;
}
public partial class Movimientos : BaseModel
{
public Movimientos()
{
}
private Nullable<int> _intIdBodega;
public Nullable<int> IntIdBodega
{
get { return _intIdBodega; }
set { SetProperty(ref _intIdBodega, value); }
}
public virtual INV_Bodegas INV_Bodegas { get; set; }
}
有了這個導航屬性:
/// Nav property
public partial class INV_Bodegas : BaseModel
{
public INV_Bodegas()
{
}
private int _intIdBodega;
public int IntIdBodega
{
get { return _intIdBodega; }
set { SetProperty(ref _intIdBodega, value); }
}
private string _strCodigoBodega;
public string StrCodigoBodega
{
get { return _strCodigoBodega; }
set { SetProperty(ref _strCodigoBodega, value); }
}
}
如果用戶更改IntIdBodega
屬性在查看模型
public class VieModel
{
ObservableCollection<Movimientos> mov {get;set;}
public VieModel()
{
mov = new ObservableCollection<Movimientos>();
mov.CollecTionChanged += mov_CollectionChanged;
}
void mov_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.NewItems != null)
{
foreach (var item in e.NewItems)
{
((Movimientos)item).PropertyChanged += det_PropertyChanged;
}
}
}
在視圖模型中,我更新導航屬性,但Datagrid從不更新綁定到此屬性的值。
public void det_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
Movimientos Idet = (Movimientos)sender;
// Here I Update The navigation property.
// But DataGrid never refresh the changes
if (e.PorpertyName == "IntIdBodega")
{
Idet.INV_Bodegas = db.INV_Bodegas
.Where(x=> x.IntIdbodega == Idet.Intidbodega)
.FirstOrDefault();
}
}
}
這就是我如何綁定。
<DataGridTextColumn Header="{x:Static resources:Labels.Bodega}"
Width="0.5*"
Binding="{Binding Inv_Bodegas.StrCodigoBodega,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"
IsReadOnly="True">
我的問題是,這列從未刷新如果我IsReadOnly爲false變化,這些變化可反映只有當我在此列按F2。
我的問題是:
如何強制用戶界面刷新此導航屬性?
真。我仍然不明白,爲什麼需要在C#中手動完成「高級」語言。 – Flaudre
Tks爲您提供幫助。但是我的導航屬性永遠不會更改此代碼。唯一改變的是主要實體中的nav屬性本身。我的模型中至少有400個實體,您的解決方案使我能夠在每個導航屬性上完成這項工作......非常大的工作。 –