【发布时间】:2015-01-04 12:04:55
【问题描述】:
我需要将域模型的属性值(加载到视图模型中)绑定到我的外壳视图上的控件内容,但是它根本不起作用(内容保持空白)。我怎样才能解决这个问题?域模型是否也需要实现 INotifyPropertyChanged?
ShellViewModel
public class ShellViewModel : Conductor<ProjectViewModel>.Collection.OneActive, IShell
{
public ShellViewModel() {
ActivateItem(new ProjectViewModel(new Project { ProjectName = "Test" }));
}
}
ShellView(标签控件)
<TabControl x:Name="Items">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ActiveItem.Project.ProjectName}" />
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
项目视图模型
public class ProjectViewModel : Screen
{
private Project _project;
public Project Project
{
get { return _project; }
private set
{
_project = value;
NotifyOfPropertyChange(() => _project);
}
}
public ProjectViewModel(Project project)
{
Project = project;
}
项目
public class Project
{
public string ProjectName { get; set; }
}
【问题讨论】:
-
你的 ShellViewModel 中有属性“ActivateItem”吗??
-
或者更好的是,你有一个名为 Items 的集合吗?
-
@TYY,为什么是
Items?这只是 TabControl 的名称? -
他正在使用 caliburn,因此通常您命名控件,以便 Caliburn 查看您的视图模型并找到要绑定的适当对象。如果您注意到 OP 没有指定任何与 TabControl 的绑定(那么他是如何创建 TabItems 这就是我问这个问题的原因)。
-
如果您在某处放置断点并使用您的代码示例检查您的
TabControl.DataContext,也就是Items.DataContext,它会解析哪种类型的集合?它应该是一个项目集合,其中每个项目都具有属性ActiveItem.Project.ProjectName,因此您可以调用类似Collection[x].ActiveItem.Project.ProjectName
标签: c# wpf mvvm data-binding caliburn.micro