绑定不适用于在XAML中创建的DependencyObject

时间:2014-10-14 15:50:47

标签: c# wpf xaml binding

我尝试使用自定义类在XAML中传递多个CommandParameters。

我创建了一个名为 ValueCommandArgs 的类,它继承自 DependencyObject ,并且有两个DepencyProperties(让我们称之为 Value1 Value2 < / em>这个例子)。

应该调用命令并传递此对象的按钮如下所示:

<Button Command="{Binding ChangeValueCommand}" Content="Execute Command">
    <Button.CommandParameter>
        <args:ValueCommandArgs Value1="{Binding TestValue1}" Value2="{Binding TestValue2}" />
    </Button.CommandParameter>
</Button>

我在命令中得到一个ValueCommandArgs-Object作为参数,但属性 Value1 Value2 始终为null / empty 。< / p>

我知道这可以通过MultiBinding和Converter来解决,但我认为我尝试它的方式会更清晰。

为什么这不起作用?

1 个答案:

答案 0 :(得分:0)

Binding需要源对象才能提供值。如果未指定绑定源(使用SourceElementName等),例如:Value1="{Binding TestValue1}"将使用该元素的DataContext

args:ValueCommandArgs对象不会从DataContext元素继承Button,因为属性值继承特别是关于属性值如何根据父元素从一个元素继承到另一个元素 - 元素树中的子关系

按钮对象在其逻辑树和可视树中不包含CommandParameter属性的值。

在许多情况下,可以通过将值直接绑定到ViewModel来避免对具有多个绑定值的此类CommandParameter的需求。

如果无法避免,您可以使用不同类型的绑定标记扩展名,例如:https://github.com/JohanLarsson/Gu.Reactive#ninjabinding,它将使用根FrameworkElement作为绑定源。

另一种方法是本博文中显示的绑定代理技术:How to bind to data when the DataContext is not inherited