You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF中如何将子UserControl的ViewModel命令绑定到主窗口按钮?

解决WPF按钮绑定自定义UserControl命令的问题

第一步:将UserControl中的命令从字段改为属性

WPF数据绑定仅支持属性,不支持字段,因此需要把MyCommand从字段改为CLR属性(若需支持属性变更通知,可改用依赖属性,以下是最简实现):

修改ChildElementWithCommand.xaml.cs:

namespace Test
{
  public partial class ChildElementWithCommand : UserControl
  {
    public ViewModel vm;
    // 将字段改为属性
    public ICommand MyCommand { get; private set; }
    public ChildElementWithCommand()
    {
      InitializeComponent();
      vm = new ViewModel(); // 注意类名遵循C#大写命名规范
      MyCommand = vm.MyCommand;
    }
  }
}

第二步:在XAML中绑定按钮的Command属性

通过ElementName引用UserControl的名称,直接绑定到它的MyCommand属性:

<StackPanel>
   <local:ChildElementWithCommand x:Name="ChildElementWithCommand"/>
   <Button Content="Test" 
           Command="{Binding ElementName=ChildElementWithCommand, Path=MyCommand}"/>
</StackPanel>

补充优化(可选)

如果你的ViewModel中的MyCommand实现了INotifyPropertyChanged,建议将UserControl的MyCommand改为依赖属性,确保命令变更时按钮能自动更新:

public static readonly DependencyProperty MyCommandProperty =
    DependencyProperty.Register(nameof(MyCommand), typeof(ICommand), typeof(ChildElementWithCommand));

public ICommand MyCommand
{
    get => (ICommand)GetValue(MyCommandProperty);
    private set => SetValue(MyCommandProperty, value);
}

内容的提问来源于stack exchange,提问作者Quizcoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:09:22