在数据模板中绑定项
本文关键字:绑定 数据 | 更新日期: 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>
如果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 并引用到模型 SaveImage。这不是一个好的解决方案。