我有一個應用程序遵循MVVM方案。我有多個視圖和視圖模型。 在我的主頁上,我有一個文本塊,我想更新所選元素的信息。MVVM更新視圖元素
在啓動應用程序時,我從mainviewmodel插入一個值來測試綁定,所以一切都在這裏工作。當代碼如下:
<TextBlock Text="{Binding colorOfElement}" Grid.Row="1"/>
守則mainviewmodel
private string _colorOfElement;
public string colorOfElement
{
get
{
return _colorOfElement;
}
set
{
_colorOfElement = value;
NotifyPropertyChanged("colorOfElement");
}
}
......
colorOfElement = "Test";
這是正確顯示。當一個用戶和一個元素進行交互時,一個事件在新的viewmodel中被觸發,在這裏我有一個對mainviewmodel的引用,所以我可以輕鬆地更新字符串colorOfElement。
private MainViewModel mv;
......
public void MouseDown(ManipulationStartedEventArgs obj)
{
FrameworkElement MovingElement = (FrameworkElement)obj.OriginalSource;
Canvas canvas = FindParentOfType<Canvas>(MovingGear);
obj.ManipulationContainer = canvas;
obj.Handled = true;
testViewModel viewModel = (testViewModel)MovingElement.DataContext;
mv.colorOfElement = viewModel.model.Color;
}
當這個函數執行時我發送到mainviewmodel並且觸發NotifyPropertyChanged。但是在顯示視圖的Application.Page上,我看不到變量的任何更新,但在代碼中變量發生變化。任何想法這個綁定問題?
答案 正如我測試datacontext和一切正常工作問題是在我的公開課。
public class MainViewModel : ViewModelBase
這裏它應該包括INotifyPropertyChanged接口來啓用該功能。所以簡單的解決方案是增加這一點,並得到:
public class MainViewModel : ViewModelBase, INotifyPropertyChanged
那麼你是好去:)
在我看來,NotifyPropertyC掛斷不被視圖接收。你確定MainViewModel被設置爲你要更新的View的DataContext嗎? – venerik
我在視圖中設置了DataContext,這使我可以在啓動時設置變量。我同意它沒有收到,但我不知道爲什麼。 – JTIM