wpf - 使用 MVVM 将父窗口的事件绑定(bind)到 UserControl 内部处理程序

标签 wpf mvvm

我有一个在 ContentControl 中加载用户控件的父窗口。父窗口有一个带有一些按钮的工具栏(即保存按钮)。我想分配将在用户控件内处理的那些按钮命令。

我需要从用户控件的 ViewModel 管理我自己的 ICommand 命令,因此总结一下:用户单击“保存”按钮(在主窗口上),因此该按钮触发用户控件处理的事件以将信息保存在控件中。

这可能吗?

最佳答案

有两种方法可以做到这一点。

  • 使用 MVVM,
    由于您的窗口包含 UserControl,因此您需要进行设置,以便 Window 具有对 UserControl ViewModel 的引用(假设它被称为 UserControlViewModel)。如果您在 UserControlViewModel 中有一个命令,则可以通过调用以下命令绑定(bind)到该命令: UserControlViewModel.Command 类似:
    <Button x:Name="Save" Content="Save" Command="{Binding UserControlViewModel.SaveCommand}">
    
  • 使用事件处理程序

    同样,您的窗口需要引用实现事件处理程序的类。您可以在 Window XAML 文件中包含以下内容:
        <Button x:Name="Save" Content="Save" Clicked="SaveButtonClicked"/>
    

    然后在你后面的代码中,
             private void SaveButtonClicked( .... sender, .... e)
              {
                   UserControlClass.SaveData();
                    // or using command
                   UserControlClass.MyCommand.Execute()
               }
    
  • 关于wpf - 使用 MVVM 将父窗口的事件绑定(bind)到 UserControl 内部处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6618315/

    相关文章:

    wpf - 通过 MVVM RelayCommand 从 ListBox 中删除 SelectedItems

    c# - 是否可以在 ASP.NET MVC 5 ViewModel 中同时使属性可为空且必需?

    c# - 如何使用 MVVM 绑定(bind)(相对或绝对)Image、MouseEnter 和 MouseLeave 事件 UI 中的每个按钮?

    c# - 可见性变化动画 : property was already registered by 'FrameworkElement'

    c# - 如何调整 NotifyIcon 的大小?

    c# - x :Bind ViewModel method to an Event inside DataTemplate

    wpf - 当 SelectedValue 不属于 ItemsSource 时,会自动从 ComboBox 中清除它

    xaml - 在 Xamarin.Forms PCL XAML 页面中禁用自动完成

    c# - 如何对齐 ItemsControl 控件 (WPF) 的列

    c# - 在 C# 中打开目录选择器