在数据模板中绑定项

本文关键字:绑定 数据 | 更新日期: 2023-09-27 18:37:22

在我的xaml文件中,我有:

<DataTemplate DataType="{x:Type Configuration:Drivers}">
    <ItemsControl ItemsSource="{Binding Cars}" FontWeight="Normal" />   
<DataTemplate>
<DataTemplate DataType="{x:Type Configuration:Car}">
    <UniformGrid HorizontalAlignment="Stretch" Margin="5,1,5,2" Columns="2">                                              
         <CheckBox IsChecked="{Binding Enabled, UpdateSourceTrigger=PropertyChanged}"/>    
         <CheckBox Visibility="{Binding SaveImage, UpdateSourceTrigger=PropertyChanged}"/>
    </UniformGrid>      
</DataTemplate>   

对于每辆车,它都有: 已启用属性,但没有 SaveImage 属性。

Car
{
   public bool Enabled {}
}

"保存图像"是在全球范围内设置的。我不知道如何绑定它:在数据模板中保存图像?

在数据模板中绑定项

>DataTemplates是一个封装边界,因此您不能一直使用FindAncestor来获取所需的数据。一个好的解决方案是将ViewModel作为StaticResource放入 XAML 中,然后将网格LayoutRoot DataContext设置为此StaticResource,然后所有其他 DataTemplates 都可以通过同一StaticResource访问DataContext

<Window.Resources>
    <local:MyViewModel x:Key="viewmodel" />
    <DataTemplate DataType="{x:Type Configuration:Car}">
        <UniformGrid HorizontalAlignment="Stretch" Margin="5,1,5,2" Columns="2">
            <CheckBox IsChecked="{Binding Enabled, UpdateSourceTrigger=PropertyChanged}"/>
            <CheckBox Visibility="{Binding Source={StaticResource viewmodel}, 
                Path=SaveImage, UpdateSourceTrigger=PropertyChanged}"/>
        </UniformGrid>
    </DataTemplate>
</Window.Resources>
<Grid DataContext="{Binding Source={StaticResource viewmodel}}">
</Grid>

如果SaveImageItemsControlDataContext中可用,则可以通过以下方式绑定到它:

<CheckBox IsChecked="{Binding DataContext.SaveImage, UpdateSourceTrigger=PropertyChanged,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}}"/>

解决方案 1:您可以尝试将 RelativeSource 将 IsCheck 绑定到 abcestor 对象。

{Binding Path=SaveImage, RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}

解决方案 2:将属性 SaveImage 添加到视图模型类 Car 并引用到模型 SaveImage。这不是一个好的解决方案。