几天前,我问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转换为基类的基类定义一个基类?但是,如果我这样做,它们是否仍会正确显示。谢谢。
最佳答案
您查看的模型应继承自PropertyChangedBase
或Screen
。 Screen
继承自PropertyChangedBase
,并实现IScreen
。 Screen
增加了生命周期(即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:Name
的ActiveItem
。
有关更多信息,请参见here。
关于wpf - 在Caliburn.micro中切换 View 模型/ View 的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13197076/