[英]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>
如果SaveImage
在ItemsControl
的DataContext
中可用,则可以通过以下方式绑定到它:
<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.