我正在使用已存在的ViewModel上的View和ViewModel。你可以说这是放置第二个ViewModel的基础。
将另一个ViewModel放置在MainViewModel
(此特定示例中的BrowseViewModel
)的基础ViewModel中时,关联的ViewModel不会显示。
实施如下:
class MainViewModel : PropertyChangedBase
{
private BrowseViewModel _BrowseViewModel= new BrowseViewModel();
public BrowseViewModel BrowseViewModel
{
get { return _BrowseViewModel; }
set
{
if (_BrowseViewModel== value) return;
_BrowseViewModel= value;
NotifyOfPropertyChange("BrowseViewModel");
}
}
}
class BrowseViewModel: PropertyChangedBase
{
private ListingViewModel _ListingViewModel = new ListingViewModel();
public ListingViewModel ListingViewModel
{
get { return ListingViewModel; }
set
{
if (_ListingViewModel == value) return;
_ListingViewModel = value;
NotifyOfPropertyChange("ListingViewModel");
}
}
}
ListingViewModel...
(我在这里剪掉了不相关的代码)
在我的标记(MainView)中实现:
<ContentControl x:Name="BrowseViewModel"/>
和BrowseView
:
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<ContentControl x:Name="ListingViewModel"/>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
当我将另一个ViewModel添加到MainViewModel
的现有基础ViewModel时,我遇到了完全相同的问题。如果我没有底层的ViewModel,如果我使用当前的MainViewModel
,一切都会正常工作。
注意:我告诉Caliburn在先前命名的命名空间中查找Views及其ViewModel,这没有问题。
答案 0 :(得分:2)
看来你在BrowseView中绑定了一些DataGrid是正确的吗?
声明类似
的内容<ContentControl x:Name="ListingViewModel"/>
是声明
的简写版本<ContentControl cal:View.Model="{Binding ListingViewModel" />
因此我假设(自从我在WPF工作已经有一段时间了)RowDetailsTemplate中的DataContext不是BrowseViewModel,而是你绑定到DataGrid的任何东西。
答案 1 :(得分:1)
试试这个......
<ContentControl cal:View.Context="BrowseView" cal:View.Model="BrowseViewModel" />
这应该得到你的BrowseView并相应地绑定,因为MainViewModel持有BrowseViewModel prop它应该正确绑定。这假定<ProjectName>.Views.BrowseView
命名空间和<ProjectName>.ViewModels.BrowseViewModel
,与ListingViewModel