SplitButton DropDownContent的绑定命令不起作用

时间:2012-01-16 16:14:30

标签: .net wpf binding mvvm

我的SplitButton中有usercontrolusercontrol的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>

2 个答案:

答案 0 :(得分:2)

最后我发现了

  

DropDownContent,它包含在不同的可视化树中   而不是持有SplitButton的那个。这种方式绑定到   RelativeSource无法工作,它找不到所需的相对来源   因为它们在不同的视觉树中。

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

所以我必须将我的VM添加为item对象中的属性,并从那里绑定vm的命令。

答案 1 :(得分:0)

我认为您应该将您的命令称为Command="{x:Static someNamespace:SomeClass.OpenCommand}"