【发布时间】:2019-04-17 11:31:16
【问题描述】:
我遇到了一个直到现在都无法解决的问题:
我正在用 C#/WPF 开发一个应用程序,并使用 Caliburn.micro 作为框架。我有多个菜单面板(作为用户控件),我想在整个应用程序中重用它们(例如网格的数据过滤菜单)并显示在 <ContentControl /> 中。根据应用程序的状态,可以显示不同的菜单面板。
现在我可以设法让事件从菜单的 View 冒泡到父级的 ViewModel。但我被属性困住了: 例如,在过滤菜单中,应在立即应用过滤器时输入文本。当我在父视图中有菜单时,这很容易:我只是在属性的 setter 方法中进行了过滤。
是否有可能制作一种类似于 c.m 中消息冒泡的“属性冒泡”(它必须是双向的!)?还是任何其他(更好的)MVVM 兼容方法?
提前致谢!
一月
小例子:
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();
}
}
MenuView.xaml
<UserControl x:Class="App.MenuView">
<Grid>
<TextBox x:Name="MyText" />
</Grid>
</UserControl>
MenuViewModel.cs
class MenuViewModel : Screen
{
public MenuViewModel()
{
}
private string _myText;
public string MyText
{
// get, set...
}
}
【问题讨论】:
-
如果 TextBox 数据绑定到视图模型的某个属性,那么它与事件没有什么不同 - 您可能只是对 PropertyChanged 事件(或您有什么)做出反应并传递信息,对吧?
标签: c# wpf mvvm data-binding caliburn.micro