我的情况是我有一个列表视图:
<ListView ItemsSource="{Binding Environments}" SelectedItem="{Binding SelectedEnvironment}">
<ListView.ItemTemplate>
<DataTemplate>
<controls:RadioButtonTextBox DataContext="{Binding}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
使用自定义控件作为项目模板:
<StackPanel Orientation="Horizontal">
<RadioButton VerticalAlignment="Center">
<RadioButton.IsChecked>
<MultiBinding Converter="{converters:StringCompareToBooleanConverter}">
<Binding Path="." RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=UserControl}"/>
<Binding Path="SelectedItem" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=ListView}"/>
</MultiBinding>
</RadioButton.IsChecked>
</RadioButton>
<TextBlock Text="{Binding}" VerticalAlignment="Center" Margin="5,0,0,0" Style="{DynamicResource RedTextBlock}"/>
</StackPanel>
我遇到的问题是,如果用户点击自定义控件的文本块,则会发生正确的事情,即选择项目(并且视图模型相应地更新),但是如果用户单击单选按钮自定义控件的单选按钮将被选中,但所选项目未更新,并且未取消选择先前选择的项目。
任何人都可以帮忙解决这个问题吗?
答案 0 :(得分:0)
单击处理,不会通过单选按钮传播。
如果项目包含输入元素,我倾向于将IsSelected
中的ItemContainerStyle
绑定到IsKeyboardFocusWithin
。不确定这是否取消选择旧项目,可能仅在选择模式为Single
。
答案 1 :(得分:0)
我发现最简单的解决方案是将单选按钮上的启用标志设置为false:
<StackPanel Orientation="Horizontal">
<RadioButton VerticalAlignment="Center" IsEnabled="False">
<RadioButton.IsChecked>
<MultiBinding Converter="{converters:StringCompareToBooleanConverter}">
<Binding Path="." RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=UserControl}"/>
<Binding Path="SelectedItem" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=ListView}"/>
</MultiBinding>
</RadioButton.IsChecked>
</RadioButton>
<TextBlock Text="{Binding}" VerticalAlignment="Center" Margin="5,0,0,0" Style="{DynamicResource RedTextBlock}"/>
</StackPanel>