【发布时间】:2014-08-04 07:58:27
【问题描述】:
在一个简单的 MVVM 应用程序中,我可以将绑定添加到视图中的某些属性。该属性可以访问另一个对象并从中返回一个属性值。假设我想在视图中显示活动项目。如果没有项目处于活动状态,则应显示特殊说明。
现在,当项目重命名时,视图中的名称应该会更新。如果我只是在属性中返回项目名称,当然不会更新。
所以我想我可以将视图绑定到在属性中创建的另一个绑定,该绑定应该转发 PropertyChanged 事件并相应地更新视图。但我看到的是“System.Windows.Data.Binding”,而不是像“Project: XYZ”这样的绑定预期结果。
项目可以在任何地方重命名,因此我想避免从那里自行引发此 ViewModel 的 PropertyChanged 事件。事情本身应该更聪明一点,而不需要到处推(当事情变得更复杂时,你经常至少忘记一次)。
代码如下:
XAML 视图:
<TextBlock Text="{Binding ActiveProjectName}"/>
C# 视图模型:
public object ActiveProjectName
{
get
{
if (ActiveProject != null)
{
// This works but won't update automatically:
//return "Project: " + ActiveProject.Name;
// This does not work at all:
return new Binding("Name")
{
Source = ActiveProject,
StringFormat = "Project: {0}"
};
}
return "(No active project)";
}
}
这可能吗?它是如何运作的?
【问题讨论】:
标签: c# wpf xaml mvvm data-binding