绑定DataTemplate中的项目

时间:2012-06-15 08:27:02

标签: c# wpf

在我的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里面bool SaveImage?

3 个答案:

答案 0 :(得分:1)

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

访问<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>

示例

{{1}}

答案 1 :(得分:0)

如果SaveImage的{​​{1}}中有DataContext,您就可以这样绑定它:

ItemsControl

答案 2 :(得分:0)

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

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

解决方案2: 将一个属性SaveImage添加到视图模型类Car并参考模型SaveImage.It不是一个好的解决方案。