2013-11-15 75 views
0

我有一個應用程序遵循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 

那麼你是好去:)

+0

在我看來,NotifyPropertyC掛斷不被視圖接收。你確定MainViewModel被設置爲你要更新的View的DataContext嗎? – venerik

+0

我在視圖中設置了DataContext,這使我可以在啓動時設置變量。我同意它沒有收到,但我不知道爲什麼。 – JTIM

回答

1

確保:

  • DataContext設置爲MainViewModel
  • 的正確實例
  • MainViewModel實現INotifyPropertyChanged接口
+0

感謝您的幫助,忘記了界面未被採用。 – JTIM