我有一个问题直到现在都无法解决:我正在C#/WPF中开发一个应用程序,并使用Caliburn.micro作为框架。我有多个菜单面板(作为用户控件(,我想在整个应用程序中重用这些面板(例如网格的数据过滤菜单(,并显示在<ContentControl />
中。根据应用程序的状态,可以显示不同的菜单面板。
现在,我可以让事件从菜单的View弹出到父级的ViewModel。但我被房地产所困扰:例如,在筛选菜单中,应在立即应用筛选时输入文本。当我在父级的视图中有菜单时,这很容易:我只是在属性的setter方法中进行筛选。
是否有可能制作一种类似于c.m中消息冒泡的"属性冒泡"(必须是双向!(?或者任何其他(更好的(符合MVVM的方法?
提前感谢!
1月
最小示例:
ParentView.xaml
<UserControl x:Class="App.ParentView">
<Grid>
<ContentControl x:Name="Toolbar" />
</Grid>
</UserControl>
ParentViewModel.cs
class ParentViewModel : Screen
{
public ParentViewModel()
{
Toolbar = new MenuViewModel();
}
private Screen _toolbar;
public Screen Toolbar
{
// get, set ...
}
public void LoadDifferentMenu()
{
this.Toolbar = new DifferentMenuViewModel();
}
}
菜单视图.xaml
<UserControl x:Class="App.MenuView">
<Grid>
<TextBox x:Name="MyText" />
</Grid>
</UserControl>
菜单视图Model.cs
class MenuViewModel : Screen
{
public MenuViewModel()
{
}
private string _myText;
public string MyText
{
// get, set...
}
}
使用calburn-micro中的Event Aggregator
在MVVM中实现发布者和订阅者模式。
通信基于消息类型,因此它可以用于具有适当类型的单向或双向通信。
请参阅链接https://caliburnmicro.com/documentation/event-aggregator了解实现细节。