2012-07-31 43 views
0

MainPage.xaml中
<TextBlock Text="{Binding Pathname, Source={StaticResource ViewModel}, Mode=OneWay}" />Silverlight TextBlock沒有綁定到MVVM,我錯過了什麼?

的App.xaml

<ResourceDictionary> 
    <vm:InspectViewModel x:Key="ViewModel" /> 
</ResourceDictionary> 

視圖模型

private string _pathname = null; 
public string Pathname 
{ 
    get { return _pathname; } 
    set 
    { 
     if (_pathname != value) 
     { 
      _pathname = value; 
      RaisePropertyChanged("Pathname"); 
     } 
    } 
} 

public void UpdatePathname(string path) 
{ 
    Pathname = path; 
} 

代碼隱藏的MainPage

private void lazyNavTree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) 
{   
    InspectViewModel vm = new InspectViewModel();   
    var path = view.GetPath().ToArray(); 
    string pathname = null; 
    // to figure out what the pathname is 
    for (int i = 0; i < path.Count(); i++) 
    { 
     TreeList treeItem = (TreeList)path[i].Key; 
     if (i == path.Count()-1) 
      pathname = pathname + treeItem.Name; 
     else 
      pathname = pathname + treeItem.Name + " : "; 
    } 
    vm.UpdatePathname(pathname); 
} 

綁定的TextBlock中顯示什麼,NAD a,zip。路徑名shource正在改變,但是當我在更改時觸發INotifyPropertyChanged事件時似乎沒有發生任何事情。

我確定我錯過了一些非常明顯的東西,但我無法弄清楚什麼!

回答

4

您正在創建您的視圖模型的兩個實例:

    在App.xaml中
  • (在應用程序資源,這是必然的實例)
  • 中的MainPage代碼隱藏(InspectViewModel vm = new InspectViewModel(),這是修改後的實例)

,您應該使用單一實例你視圖模型,例如,

var vm = (InspectViewModel)Application.Current.Resources["ViewModel"]; 

而不是在MainPage代碼隱藏中創建它。

+0

+1,我錯過了那部分... :) – 2012-07-31 11:31:06

+0

...課程!天才!我知道這是明顯的。謝謝,問題解決了... – xhedgepigx 2012-07-31 11:42:45

0

看起來你剛剛錯過了你的裝訂中的Path,試試;

Text="{Binding Path=Pathname, Source={StaticResource ViewModel}, Mode=OneWay}" 

編輯:顯然,這是沒有問題的,但保持這個答案,因爲xhedgepigx提供如下評論有用的鏈接。

+0

不幸的是,事實並非如此。我已經嘗試確保(並且仍然沒有從我的TextBlock反應),但是您並不總是需要包含'Path ='[info](http://msdn.microsoft.com/zh-cn/library/cc189022 (v = vs.95).aspx)。謝謝 – xhedgepigx 2012-07-31 11:32:29

+0

在這種情況下,我可以確認'Path ='是可選的。 – jv42 2012-07-31 18:43:48

2

這是因爲您在lazyNavTree_SelectedItemChanged中每次都從viewmodel創建一個實例。你應該只使用一個。

+0

+1作爲接受類似的答案,但較少的信息,謝謝 – xhedgepigx 2012-07-31 11:43:19

相關問題