WPF多项目源?

时间:2011-06-09 17:08:25

标签: c# wpf xaml itemssource

单个控件可以有多个ItemSource吗?

鉴于以下代码:

<ComboBox Margin="137,101,169,183" ItemsSource="{Binding collection}"   SnapsToDevicePixels="True"            
 <ComboBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                <CheckBox Command="{Binding CheckCommand}" IsChecked="{Binding IsChecked}" Content="{Binding Name}"/>
                    <TextBlock Text="" />
                </StackPanel>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>

ComboBox DataTemplate中的TextBlock需要VM中其他属性的数据,而不是ComboBox的数据。如何实现这一目标?

感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用RelativeSource - FindAncestor来访问可视化树并获取不同的DataContext。

例如(假设命令是你想要的):

Command=”{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ComboBox}}, Path=CheckCommand}”

This也应该是一个很好的资源。

编辑:错字和资源。

答案 1 :(得分:2)

如果我没记错的话,DataTemplates在他们自己的范围内运行,不能直接使用DataTemplate之外定义的ElementNames。但是,您可以使用StaticResource并直接从模板中的TextBlock引用它来解决问题。

我没有尝试过Ragepotatos的方法去DataTemplate范围,但是很想知道这是否适合你。