gpt4 book ai didi

c# - WPF 反向绑定(bind) OneWayToSource

转载 作者:太空宇宙 更新时间:2023-11-03 16:55:08 30 4
gpt4 key购买 nike

我有一个自定义控件,它具有以下依赖属性

public static readonly DependencyProperty PrintCommandProperty = DependencyProperty.Register(
"PrintCommand",
typeof(ICommand),
typeof(ExportPrintGridControl),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.Inherits));

public ICommand PrintCommand
{
get { return (ICommand)GetValue(PrintCommandProperty); }
set { throw new Exception("ReadOnly Dependency Property. Use Mode=OneWayToSource"); }
}

在我的控件的构造函数中,我正在设置属性的默认值:

public MyControl()
{
this.SetValue(PrintCommandProperty, new DelegateCommand<object>(this.Print));
}

然后我尝试将该属性绑定(bind)到我的 ViewModel,以便我可以访问该属性并调用打印命令。

<controls:MyControl PrintCommand="{Binding PrintCommand, Mode=OneWayToSource}"/>

但是,XAML 中的绑定(bind)会导致属性值设置为 null。如果我删除 XAML 中的绑定(bind),默认属性值将在我的控件的构造函数中正确设置。

让我的 ViewModel 调用控件的 Print 方法的正确方法是什么?

最佳答案

我刚刚重读了你的问题,听起来你正试图从你的 View 模型中调用你的 View 中的方法。这不是 View 模型的用途。

如果这确实是您想要的,则无需使用命令:您的 View 所需要做的就是调用:

view.Print()

如果你想改变打印命令,那么你确实需要一个如图所示的属性。在这种情况下,您的 View 模型会调用

view.PrintCommand.Execute()

在这两种情况下,您都不需要数据绑定(bind)。

一种更类似于 WPF 的方法是将绑定(bind)添加到控件的 CommandBindings 集合以处理内置的 Application.Print 命令。然后 View 模型可以在它想要打印时使用 RaiseEvent 发送这个命令。

请注意,CommandBinding 是与 Binding 完全不同的对象。不要混淆两者。 CommandBinding 用于处理路由命令。 Binding 用于更新属性值。

关于c# - WPF 反向绑定(bind) OneWayToSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2365203/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com