WPF多个项目源

本文关键字:项目 WPF | 更新日期: 2023-09-27 17:58:43

单个控件是否可以有多个ItemSources?

给定以下代码:

<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之外的其他属性的数据。如何做到这一点?

谢谢。

WPF多个项目源

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

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

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

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

编辑:打字和资源。

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

我还没有尝试过Ragepotatos的方法来超出DataTemplate的范围,但我很想知道这是否也适用于你。