选择组合框/文本框时,选择ListView项目WPF MVVM

本文关键字:选择 MVVM 项目 WPF ListView 组合 文本 | 更新日期: 2023-09-27 18:28:22

我有一个ListView,它包含一个对象集合作为itemssource,所选对象作为SelectedItem

<ListView Margin="5 0 5 0" ItemsSource="{Binding ObjectCollection}" SelectedItem="{
Binding SelectedObject}" Grid.Row="1">

ListView.View内部,我有几个GridViewColumn,每个都有一个CellTemplate

<GridViewColumn CellTemplate="{StaticResource ReferenceToCellTemplate}" Header="{
Binding ColumnName, Converter={StaticResource upperConverter}}" Width="90" 
HeaderContainerStyle="{StaticResource StaticGridViewColumnHeaderStyleWhite}"/>

这样一个模板的例子:

<DataTemplate x:Key="ReferenceToCellTemplate">
    <ComboBox ItemsSource="{Binding PossibleValuesForProperty, UpdateSourceTrigger=
PropertyChanged}" SelectedItem="{Binding SelectedProperty, UpdateSourceTrigger=
PropertyChanged}" SelectionChanged="Protocol_ComboBox_SelectionChanged"/>
</DataTemplate>

现在是问题:

假设我在这个列表视图中有2个组合框。例如具有不同软件的组合框和具有该软件的不同版本的另一组合框

每当软件在某一行发生更改时,都应更新可能的版本

问题是:我如何知道软件组合框也属于哪个对象,以便调整该对象的可能版本

当您更改组合框内的值时,这并不意味着该行已被选中。因此,当我试图调整所选行的版本时,我可能会调整错误的行。

因此,在我看来,有两种可能性:

  • 每当调整/选择给定行中的某个内容时,请选择该行
  • 无需选择即可了解更改/选择的控件所在的行

任何帮助都将不胜感激。

选择组合框/文本框时,选择ListView项目WPF MVVM

解决方案是在属性更改时不使用事件处理程序,而只处理行对象属性的更改。因此,当"软件"的属性更改时,调用一个方法来调整该软件的"PossibleVersions"属性。所有这些都在行对象的VM中。

基本初学者MVVM错误我猜