0

主页.xaml
<TextBlock Text="{Binding Pathname, Source={StaticResource ViewModel}, Mode=OneWay}" />

应用程序.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;
}

主页代码隐藏

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 什么都不显示,nada,zip。路径名 shource 正在正确更改,但是当我在更改时触发 INotifyPropertyChanged 事件时似乎没有发生任何事情。

我确定我错过了一些非常明显的东西,但我不知道是什么!

4

3 回答 3

4

您正在创建 ViewModel 的 2 个实例:

  • 在 App.xaml 中(在应用程序资源中,这是绑定到的实例)
  • 在 MainPage 代码隐藏(InspectViewModel vm = new InspectViewModel()这是修改后的实例)

您应该使用 ViewModel 的单个实例,例如,

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

而不是在 MainPage 代码隐藏中创建它。

于 2012-07-31T11:29:37.180 回答
2

这是因为您每次都在lazyNavTree_SelectedItemChanged 中从您的视图模型创建一个实例。你应该只使用一个。

于 2012-07-31T11:31:41.770 回答
0

看起来您只是错过了绑定中的路径,请尝试;

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

编辑:显然这不是问题,但保留这个答案,因为 xhedgepigx 提供了一个有用的链接作为下面的评论。

于 2012-07-31T11:27:57.477 回答