我有ShellViewModel
继承自Conductor<Workspace>.Collection.OneActive
和ShellView
,其ContenControl
x:Name
属性为ActiveItem
。< / p>
请注意,Workspace
会继承Screen
。
ShellViewModel
public class ShellViewModel : Conductor<Workspace>.Collection.OneActive
{
ShellViewModel(IEnumerable<Workspace> items)
{
this.Items = items;
// below is not how I activate, just an example for descriptive purposes
this.ActivateItem(this.Items.FirstOrDefault(e => e.Id == "Container"));
}
}
ShellView
<ContentControl x:Name="ActiveItem" />
在上文中,我的Items
集合已成功填充了Workspace
的对象,object of Workspace
在ContentControl
被调用时成功显示ActivateItem
ActiveItem
是Screen
,而不是Conductor<Workspace>
,其中包含ObservableCollection<PanelViewModel>
。我的ContainerView
有一个ItemsControl
,其ItemsSource
绑定到PanelViewCollection
,其模板覆盖以使用`UniformGrid显示。
ContainerViewModel
public class ContainerViewModel : Screen
{
// get/set implantation missed for brevity
public ObservableCollection<PanelViewModel> PanelViewCollection
{
get;
set;
}
public void AddPanelViewModel()
{
var @new = new PanelViewModel();
this.PanelViewCollection.Add(@new);
}
}
ContainerView
<ItemsControl ItemsSource="{Binding PanelViewCollection}>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
我的Button
上的ContainerView
调用了AddPanelViewModel
上的ContainerViewModel
函数,并且new PanelViewModel
被添加到集合中,并在ContainerView
上显示{1}}。
到目前为止,一切似乎都正常。
PanelViewModel
继承自Conductor<Workspace>.Collection.OneActive
,PanelView
的{{1}}属性为ContenControl
,属性为ActiveItem。
PanelViewModel
x:Name
的PanelView
public class PanelViewModel : Conductor<Workspace>.Collection.OneActive
{
PanelViewModel(IEnumerable<Workspace> items)
{
this.Items = items;
// below is not how I activate, just an example for descriptive purposes
this.ActivateItem(this.Items.FirstOrDefault(e => e.Id == "PanelA"));
}
}
虽然显示了<StackPanel>
<TextBlock Text="There be treasure here!" />
<ContentControl x:Name="ActiveItem" />
</StackPanel>
(我在这里看到了宝藏)PanelView
未显示,但我认为它与激活有关,因为ActiveItem
方法{ {1}}被激活没有被调用。
我错过了什么?
修改
对于那些我倾向于审核它的人,我已经为Git repo提供了一个例子:
答案 0 :(得分:3)
经过进一步阅读后,我相信OP中描述的实施有两个问题。
ContainerView
ItemsControl.ItemTemplate
DataTemplate
不正确。我似乎在显示View
而不是ViewModel
。ContainerView
部分管理Screen
有效期,它本应继承自Conductor
,而不是{{1}}。对于可能遇到相同或类似问题的任何人,我已向Git repo提交了有效的实施方案。