C# 装订不';无法处理在XAML中创建的DependencyObject

C# 装订不';无法处理在XAML中创建的DependencyObject,c#,wpf,xaml,binding,C#,Wpf,Xaml,Binding,我试图使用自定义类在XAML中传递多个CommandParameters 我创建了一个名为ValueCommandArgs的类,该类继承自DependencyObject,并具有两个DependencyProperty(在本例中,我们将它们称为Value1和Value2) 用于调用命令并传递此对象的按钮如下所示: <Button Command="{Binding ChangeValueCommand}" Content="Execute Command"> <Butt

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

我创建了一个名为ValueCommandArgs的类,该类继承自DependencyObject,并具有两个DependencyProperty(在本例中,我们将它们称为Value1和Value2)

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

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

我确实在命令中获得了ValueCommandArgs对象作为参数,但是属性Value1和Value2始终为null/empty

我知道这可以通过多重绑定和转换器来解决,但我认为我尝试的方法是更干净的方法


为什么这不起作用?

绑定需要源对象才能提供值。未指定绑定源时(使用
source
ElementName
等),例如:
Value1=“{Binding TestValue1}”
使用元素的
DataContext

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

button对象在其逻辑树或可视树中不包含
CommandParameter
属性的值

在许多情况下,通过将值直接绑定到ViewModel,可以避免使用具有多个绑定值的
CommandParameter

当无法避免时,您可以使用不同类型的绑定标记扩展,如:将根
FrameworkElement
用作绑定源


另一种方法是绑定代理技术,如本文所示:

输出窗口中是否出现绑定错误?我认为绑定失败。您希望
DataContext
被传递给
ValueCommandArgs
,但我认为不可能。我也不知道如何实现一些可以接收传递给它的DataContext的类型。在这种情况下,您应该为绑定显式设置
源代码。(请注意,
ElementName
RelativeSource
仅当您的
ValueCommandArgs
继承自FrameworkElement或FrameworkContentElement时才可用)。您将需要一个绑定代理签出此-@NovitchiS解决了此问题;也许考虑把它写出来作为答案。当然,我会写一个答案,为什么绑定不起作用,代理如何解决这个问题,只要我几分钟。