gpt4 book ai didi

c# - 未激活嵌套导体的屏幕

转载 作者:行者123 更新时间:2023-11-30 22:02:16 25 4
gpt4 key购买 nike

我有一个 ShellViewModel继承自 Conductor<Workspace>.Collection.OneActive和一个 ShellView它有一个 ContenControlx:Name ActiveItem 的属性.

请注意 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"));
}
}

外壳 View

<ContentControl x:Name="ActiveItem" />

在上面,我的Items集合已成功填充 Workspace 的对象和 object of Workspace成功显示在ContentControl什么时候ActivateItem被称为。

ActiveItemScreen而不是 Conductor<Workspace>它包含一个 ObservableCollection<PanelViewModel> .我的ContainerView有一个 ItemsControl及其 ItemsSource绑定(bind)到 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);
}
}

容器 View

<ItemsControl ItemsSource="{Binding PanelViewCollection}>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>

A Button在我的 ContainerView调用 AddPanelViewModel ContainerViewModel 上的函数和一个 new PanelViewModel被添加到集合中,并且在 ContainerView 上可见.

到目前为止,一切似乎都工作正常。

PanelViewModel继承自 Conductor<Workspace>.Collection.OneActivePanelView有一个 ContenControlx:Name `ActiveItem 的属性。

面板 View 模型

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"));
}
}

面板 View

<StackPanel>
<TextBlock Text="There be treasure here!" />
<ContentControl x:Name="ActiveItem" />
</StackPanel>

虽然 PanelView显示(我在这里看到宝)ActiveItem没有显示,我认为它与激活有关,因为 OnActivate Workspace 的方法被激活不是被调用。

我错过了什么?

编辑

我已经提交了一个示例给 Git repo对于那些我倾向于评论它的人:

最佳答案

进一步阅读后,我认为 OP 中描述的我的实现存在两个问题。

  1. 我的 ContainerView ItemsControl.ItemTemplate DataTemplate 不正确。我似乎在显示 View 而不是 ViewModel
  2. 由于我的 ContainerView 部分管理 Screen 生命周期,它应该继承自 Conductor,但事实并非如此。

我已将工作实现提交给 Git repo对于可能遇到相同或类似问题的任何人。

关于c# - 未激活嵌套导体的屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27022850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com