2012-07-31 2 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> 

ViewModel

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 CodeBehind

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 не показывает ничего, над a, zip. Исходный код пути изменяется правильно, но ничего не происходит, когда я запускаю событие INotifyPropertyChanged при изменении.

Уверен, что мне не хватает чего-то действительно очевидного, но я не могу понять, что!

ответ

4

Вы создаете 2 экземпляра вашей ViewModel:

  • в App.xaml (в приложении ресурсов, это экземпляр, который связан с)
  • в MainPage фонового кода (InspectViewModel vm = new InspectViewModel(), это модифицированный экземпляр)

Вы должны использовать один экземпляр из вас ViewModel, например,

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

вместо того, чтобы создавать его в коде MainPage.

+0

+1, я пропустил эту часть ... :) –

+0

... КУРС! Genius! Я знал, что это что-то очевидно. Спасибо, проблема решена ... – xhedgepigx

0

Похоже, вы просто пропустили Path в своем переплёте, попробуйте;

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

EDIT: Видимо, это не было проблемой, но сохраняя этот ответ, так как xhedgepigx предоставил полезную ссылку как комментарии ниже.

+0

К сожалению, это не так. Я попробовал это, чтобы удостовериться (и до сих пор нет реакции с моего TextBlock), но вам не всегда нужно включать «Path =» [info] (http://msdn.microsoft.com/en-us/library/cc189022 (v = vs.95) .aspx). Спасибо – xhedgepigx

+0

В этом случае я могу подтвердить, что «Path =» является необязательным. – jv42

2

Это потому, что вы каждый раз создаете экземпляр из своей viewmodel в lazyNavTree_SelectedItemChanged. Вы должны использовать только один.

+0

+1 как подобный ответ, как принято, но меньше информации, спасибо – xhedgepigx

Смежные вопросы