主窗口下有 3 个用户控件。每个控件都有自己的保存按钮。主窗口有一个 SaveAll 按钮。
MainWindow 有一个 ContentControl,并且 content 属性绑定(bind)到 VM。在 ButtonClickCommand 上运行时, View 被实例化并分配给内容属性。
此 SaveAll 按钮将在内部调用与 UserControls Save 按钮关联的方法。因此,SaveAll 没有它自己的方法。
这必须由 DependencyProperty 实现。
我曾经在商业应用程序中看到过这种场景,但不知何故错过了它背后的概念。
我不明白这背后的逻辑是什么,但这是一件非常有用的事情。
现在我必须实现这一点,但我错过了一件小事,我不知道。
我希望情况很清楚。
请在这种情况下使用代码帮助我。
谢谢,
主播
最佳答案
既然您提到了 MVVM,这就是您可能正在寻找的内容。请注意,如果您使用诸如 Caliburn 之类的 MVVM 框架,这将更加简洁和容易,但对于此示例,它只是普通的 MVVM:
public class MainViewModel
{
public MainViewModel()
{
ViewOneModel = new SubViewModel();
ViewTwoModel = new SubViewModel();
Children = new List<SubViewModel>(new[] { ViewOneModel, ViewTwoModel });
}
public void SaveAll()
{
foreach(var child in Children)
{
child.Save();
}
}
public IList<SubViewModel> Children { get; private set; }
public SubViewModel ViewOneModel { get; set; }
public SubViewModel ViewTwoModel { get; set; }
}
public class SubViewModel
{
public void Save()
{
}
}
在 UI 上,您的主视图中基本上包含 subview (UserControls):
<StackPanel>
<Button Width="100" Height="20" Content="Save All" />
<local:ViewOne DataContext="{Binding ViewOneModel}" />
<local:ViewTwo DataContext="{Binding ViewTwoModel}" />
</StackPanel>
您只需使用 ICommand 接口(interface)(最好是 RelayCommand 实例)将保存方法绑定(bind)到您的按钮。
关于WPF 依赖属性解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6040128/