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
相关产品推荐
相关产品推荐

