我的SplitButton
中有usercontrol
,usercontrol
的datacontext是view
,它定义了我想要splitbutton
绑定的命令。
正如我在下面显示的简短xaml代码,第一个绑定有效,但第二个(button
中的DropDownContent
)没有输出:
找不到引用'RelativeSource的绑定源 FindAncestor,AncestorType ='System.Windows.Controls.UserControl ....
或(如果我使用ElementName
而不是ReleativeSource
替换绑定表达式)
找不到引用'ElementName = uc'...
的绑定源
<UserControl x:Name="uc"
xmlns:extToolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit/extended"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
>
<Grid>
<ItemsControl ItemsSource="{Binding ItemList, IsAsync=True}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<extToolkit:SplitButton Command="{Binding
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}},
Path=DataContext.OpenCommand,
Mode=OneWay}"
CommandParameter="{Binding}"
Content="{Binding ID}">
<extToolkit:SplitButton.DropDownContent>
<Button Command="{Binding
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}},
Path=DataContext.OpenCommand,
Mode=OneWay}"
CommandParameter="{Binding}"
Content="{Binding ID}"/>
</extToolkit:SplitButton.DropDownContent>
</extToolkit:SplitButton>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</UserControl>
答案 0 :(得分:2)
最后我发现了
DropDownContent
,它包含在不同的可视化树中 而不是持有SplitButton
的那个。这种方式绑定到 RelativeSource无法工作,它找不到所需的相对来源 因为它们在不同的视觉树中。
REF(虽然这是另一种控制,但我认为它们基于同样的事情)
所以我必须将我的VM添加为item对象中的属性,并从那里绑定vm的命令。
答案 1 :(得分:0)
我认为您应该将您的命令称为Command="{x:Static someNamespace:SomeClass.OpenCommand}"
。