繁体   English   中英

在DataTemplate中绑定项目

[英]Binding an item inside DataTemplate

在我的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>   

对于每辆汽车,它都有:Enabled属性,但没有SaveImage属性。

Car
{
   public bool Enabled {}
}

“ SaveImage”是全局设置的。 我不知道该如何绑定:在DataTemplate里面保存SaveImage吗?

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并为Model SaveImage进行引用,这不是一个好的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM