wpf - 如何使用与路径不同的源将数据绑定(bind)到 CLR 对象

标签 wpf data-binding mvvm

我正在尝试通过数据绑定(bind)到 View 模型中的属性( View 的数据上下文)来更新 View 上的文本 block 。

在下面的代码中;当已选项目 更改,我希望文本 block 文本使用 的值进行更新姓名 房产位于 已选项目 .

为了实现这一点,我设置了 绑定(bind)源 到正在更改的属性和 绑定(bind)路径到我要更新文本 block 的数据。

IE。我期望绑定(bind)引擎会看到绑定(bind)源(SelectedItem)的变化并从绑定(bind)路径(SelectedItem.Name)中提取数据。

http://msdn.microsoft.com/en-us/library/ms746695.aspx

设置 SelectedItem 会引发 INPC,但文本不会更新。

public class ViewModel
{
     public IConfiguration Configuration { get; set;}
}

public class Configuration : IConfiguration, INotifyPropertyChanged
{
    public Item SelectedItem
    {
       get { return _item;}
       set
       {
           _item = value;
           ItemName = _item.Name;
           RaisePropertyChangedEvent("SelectedItem");
       }
    }

  public string ItemName 
  {
       get { return _itemName;}
       set
       {
           _itemName= value;
           RaisePropertyChangedEvent("ItemName");
       }
    }
}

public class Item
{
   public string Name { get; set;}
}

我知道看到配置的更改是因为这有效:
<TextBlock Text="{Binding Configuration.ItemName}"/>

但这不会:
<TextBlock Text="{Binding Path=Name, Source=Configuration.SelectedItem}"/>

这也不是:
<TextBlock Text="{Binding Path=Configuration.SelectedItem.Name, Source=Configuration.SelectedItem}"/>

我假设这应该很简单——我错过了什么?

最佳答案

我实际上从未见过有人使用 Binding.Source以前,所以我不太了解它。但我的猜测是它不是动态的。当您创建绑定(bind)时,它会获取对 Source 中指定的对象的引用,然后就是这样:它在绑定(bind)的生命周期内使用相同的引用。

为什么要把这个复杂化?只需使用 Path .这是进行绑定(bind)的正常方式,而且它一直是动态的——你所做的正是 Path 的目的。

<TextBlock Text="{Binding Path=Configuration.SelectedItem.Name}"/>

关于wpf - 如何使用与路径不同的源将数据绑定(bind)到 CLR 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6939111/

相关文章:

c# - 绑定(bind)到 List<> 依赖属性的 WPF 上下文菜单

wpf - 将 Xceed DataGrid 的 Column 属性绑定(bind)到 viewmodel 属性属性

c# - 我可以在单个泛型类型上指定多个约束吗?

WPF:如何在 1 个绑定(bind)中使用 2 个转换器?

c# - 使用 Renci.SshNet SftpClient 更改具有绝对路径的目录导致 SftpPathNotFoundException

c# - 选择文件夹对话框 WPF

javascript - React 无法读取未定义的属性 'bind'

c# - 将 RichEditBox 绑定(bind)到 .rtf 文件

silverlight - 让 Silverlight MVVM 与 Expression Blend 设计时数据一起工作?

wpf - 适用于经典 WPF 桌面应用程序的 Windows 10/8 开始菜单磁贴图标大小