我试图通过将数据绑定到viewmodel(视图的datacontext)属性来更新视图上的文本块。如何将数据绑定到源不同于路径的CLR对象
在下面的代码中;当SelectedItem的变化,我想的名称更改文本块文本名称财产SelectedItem。
在试图做到这一点我已经设置了绑定源到正在更改属性和绑定路径我想要更新与文本块中的数据。
I.e.我期待绑定引擎将看到绑定源(SelectedItem)的变化,并从绑定路径(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}"/>
我假设这应该是str aightforward - 我错过了什么?
对于第二个和第三个选项工作,你必须实现你的项目类INotifyPropertyChanged接口,以及...如果这是不可能的,那么你必须提高BindingExpression.UpdateTarget()每个Item.Name更新时间打电话在你的代码中,由于MVVM的限制,这必须在附加的行为中完成。 –