WPF 依赖属性解决方法

标签 wpf mvvm dependency-properties routed-events

主窗口下有 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/

相关文章:

.net - WPF 样式覆盖高度

c# - Awesomium 在 WindowsBase.dll 中引发 ArgumentException

c# - Stange 删除 observablecollection 上的行为

c# - wpf 数据网格复选框列 : how to enable/disable checkboxes

c# - MVVM : RaisePropertyChange on another item in the same list

wpf - 为什么 WPF 中的 Binding 不调用该属性?

wpf - 从 XAML 调用在代码隐藏中定义的自定义依赖项属性

xaml - View 模型属性更改时如何更改图像源

c# - 将依赖属性与异步 ctp 一起使用

c# - MVVM 模式的正确使用