gpt4 book ai didi

wpf - 在Caliburn.micro中切换 View 模型/ View 的简单方法

转载 作者:行者123 更新时间:2023-12-03 10:20:17 25 4
gpt4 key购买 nike

几天前,我问this question,但是答案让我更加困惑。所以我会问一个简单的问题:

(我正在使用Caliburn.Micro,这是WPF应用程序)。假设您有一个MainView/MainViewModel,它作为子级AView/AViewModel和BView/BViewModel。您的MainView是一个网格,并且要根据用户选择使用AView或BView填充一个单元格。如果我只想显示AView,请执行以下操作:

在MainView中:

<StackPanel Name="SP_Controls" VerticalAlignment="Bottom" Grid.Row="1" Grid.Column="0">
<ContentControl Name="ViewModelToShow" Margin="10" />
</StackPanel>

并在MainViewModel中:
public AViewModel ViewModelToShow{get; set;}

我现在的天真想法是做这样的事情:
private AViewModel _AVM;
private BViewModel _BVM;

public ... ViewModelToShow{ get; set;}

然后在代码中,例如,将viewmodel设置为显示:
ViewModelToShow = _BVM; 

我唯一的问题是“...”,因为每个ViewModel属于不同的类。有没有办法用泛型来做到这一点,还是应该为我将ViewModels转换为基类的基类定义一个基类?但是,如果我这样做,它们是否仍会正确显示。谢谢。

最佳答案

您查看的模型应继承自PropertyChangedBaseScreenScreen继承自PropertyChangedBase,并实现IScreenScreen增加了生命周期(即OnActivate等)。

然后,您可以使用自己的方法,即拥有一个名为例如CurrentViewModel类型为IScreen。然后,可以根据需要将其设置为适当的 View 模型。请注意,如果要正确更新用户界面,则当引用更改时,此CurrentViewModel属性应在 setter 中调用NotifyOfPropertyChange

另外,您可以将父 View 模型视为两个 subview 模型的导体,并使用内置的Caliburn.Micro Conductor类型。例如,从Conductor<IScreen>.Collection.OneActive派生。

然后,您可以将2个 subview 模型添加到父 View 的Items集合中,并调用ActivateItem方法来设置当前 View 模型。然后将 View 的ContentControl更新为x:NameActiveItem

有关更多信息,请参见here

关于wpf - 在Caliburn.micro中切换 View 模型/ View 的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13197076/

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