在我的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?
答案 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不是一个好的解决方案。