[英]View model doesn't get updated to DataContext
我有一個工作程序,其中視圖模型將數據提供給視圖。 這是在構造函數和Refresh()方法中完成的,如下所示。 我通常會放置一個引用視圖模型的私有屬性,因為我想在與它通信時省略強制轉換。
public class TheView
{
private ViewModel TheViewModel { get; set; }
public TheView()
{
TheViewModel = new ViewModel();
DataContext = TheViewModel;
}
public Refresh()
{
TheViewModel = new ViewModel();
DataContext = TheViewModel;
}
}
然后,我變得貪婪並開始追逐線條。 由於構造函數將DataContext連接到屬性TheViewModel ,我想我可以只分配給后者,而前者會自行更新它的內容。 令我失望的是,我發現事實並非如此。 以下內容為我提供了正確的對象列表,但DataContext不受影響。
public class TheView
{
private ViewModel TheViewModel { get; set; }
public TheView()
{
TheViewModel = new ViewModel();
DataContext = TheViewModel;
}
public Refresh() { TheViewModel = new ViewModel(); }
}
問題是為什么會這樣。 或者更確切地說,如果它應該是這樣的話。 我在想,如果它不應該表現得像這樣,也許我在代碼中的其他地方有問題會導致流程不暢......
我認為您確實需要了解DataContext
是一個依賴屬性。
它的定義如下所示:
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Localizability(LocalizationCategory.NeverLocalize)]
public object DataContext
{
get
{
return this.GetValue(FrameworkElement.DataContextProperty);
}
set
{
this.SetValue(FrameworkElement.DataContextProperty, value);
}
}
...
public static readonly DependencyProperty DataContextProperty =
DependencyProperty.Register("DataContext", typeof (object...
依賴屬性不僅僅是普通的 .NET 屬性,因為它們支持
在您的情況下,重要的是“更改通知”主題。
當您(重新)為作為依賴屬性的屬性(如DataContext
)分配值時,WPF 將自動獲取此更改。 在這種情況下,可以這么說,更改通知是在依賴屬性的 setter 中完成的。
如果您分配給“普通”屬性甚至私有字段,則情況並非如此(不調用DataContext
屬性的 setter),即使它指向 DataContext。
您基本上是在重新分配私有屬性,而不是 DataContext。
TheViewModel
實例 ATheViewModel
實例 BTheViewModel
私有屬性指向實例 B--> 沒有理由應該刷新 DataContext。 你沒有碰它。 它仍然指向仍在內存中的初始實例 A。
編輯:
這個答案是假設綁定使用
DataContext
作為源,而不是TheViewModel
。DataContext
是一個 DependencyProperty,而TheViewModel
不是。 用TheViewModel
作為綁定源替換整個視圖模型需要使用依賴屬性或NotifyPropertyChanged
通知視圖
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.