绑定命令不工作

问题描述:

我在usercontrol一个SplitButton,则usercontrol的DataContext的是view定义命令我希望splitbutton结合。绑定命令不工作

正如我简短的XAML代码显示如下,第一绑定工作,但第二(在DropDownContentbutton)不与输出:

无法为参照结合找到源“的RelativeSource FindAncestor ,AncestorType ='System.Windows.Controls.UserControl ....

或(如果我顶替结合使用的ReleativeSourceElementName代替表达)

无法为参照 '的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> 

最后,我发现了

DropDownContent和不同的视觉树 它的内容比拥有SplitButton的那个。这样绑定到 RelativeSource不能工作,它没有找到所需的相对源 ,因为它们在不同的视觉树中。

REF(虽然它是另一种控制,但我认为它们都是基于同样的事情)

所以,我有我的VM添加为项目对象的属性,并从那里结合虚拟机的命令。

我认为你应该参考你的命令Command="{x:Static someNamespace:SomeClass.OpenCommand}"