我有两个ItemsControls
具有相同的ItemsSource
。一个对每个项目有一些控制,另一个对每个项目都有checkbox
。它们中的控件是动态添加的。如何将第一个visibility
的{{1}}绑定到另一个ItemsControls
中的相应checkbox
?
这是第一个包含行中多个ItemsControls
的ItemsControl。注意:我想隐藏整行控件。
TextBlocks
这是第二个<ItemsControl ItemsSource="{Binding VehicleCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock />
<TextBlock />
<TextBlock />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
和ItemsControl
:
checkboxes
所以会发生的情况是,<ItemsControl ItemsSource="{Binding VehicleCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<CheckBox Content="{Binding Name}"
IsChecked="True" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
中的每个项目都为第一个VehicleCollection
添加了新的textblocks
行,并为第二个ItemsControl
添加了checkbox
ItemsControl
。这些应该相互关联,例如:如果我取消选中第一个复选框,则应隐藏另一个ItemsControl
的第一行。
我知道怎么做booltovis转换器,只是不确定如何关联这两个ItemsControls。
编辑:顺便说一下,这些都在mainwindow.xaml中。
答案 0 :(得分:2)
你应该能够通过在Vehicle
类中添加一个布尔属性来管理它,我认为这是你VehicleCollection
的基础。类似于:IsSelected
。
然后您可以修改您的XAML,如下所示:
<ItemsControl ItemsSource="{Binding VehicleCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Visibility="{Binding IsSelected,Converter={StaticResource boolToVisConverter}}"/>
<TextBlock Visibility="{Binding IsSelected,Converter={StaticResource boolToVisConverter}}"/>
<TextBlock Visibility="{Binding IsSelected,Converter={StaticResource boolToVisConverter}}"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<ItemsControl ItemsSource="{Binding VehicleCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<CheckBox Content="{Binding Name}"
IsChecked="{Binding IsSelected}" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
这是未经测试的XAML,因为我只是将其输入到答案中。可能需要调整。
答案 1 :(得分:2)
为了显示或隐藏第一个ItemsControl的项目,将IsVisible
属性添加到Vehicle类(即VehicleCollection
的元素类型)并绑定Visibility
的{{1}}项目ContentPresenter
IsVisible
中的ItemContainerStyle
属性:
<ItemsControl ItemsSource="{Binding VehicleCollection}">
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Visibility"
Value="{Binding IsVisible,
Converter={StaticResource BooleanToVisibilityConverter}}"/>
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
...
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
在其他ItemsControl中,将CheckBox的IsChecked
属性绑定到IsVisible
属性:
<ItemsControl ItemsSource="{Binding VehicleCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Name}" IsChecked="{Binding IsVisible}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
当然要确保类Vehicle实现INotifyPropertyChanged
并在PropertyChanged
属性更改时触发IsVisible
事件。