【问题标题】:Select ListView item when combobox/textbox is selected WPF MVVM选择组合框/文本框时选择 ListView 项目 WPF MVVM
【发布时间】:2013-08-21 19:37:04
【问题描述】:

我有一个ListView,其中包含itemssource 的对象集合和SelectedItem 的选定对象。

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

ListView.View 里面我有几个GridViewColumns,每个都有一个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 个组合框。例如,一个包含不同软件的组合框和另一个包含该软件不同版本的组合框。

只要软件在某一行发生变化,就应该更新可能的版本。

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

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

所以我认为有两种可能性:

  • 只要调整/选择该行内的某些内容,就选择给定行
  • 无需选择即可了解更改/选定控件位于哪一行

任何帮助将不胜感激。

【问题讨论】:

  • 你知道 ObjectCollection 的顺序吗?在这种情况下,我可能会使用 ListView.SelectedIndex 作为最后的手段。
  • 您是否在代码隐藏中定义了 ComboBox.SelectionChanged 处理程序?
  • 是的,我确实定义了处理程序。问题是选定的索引仍然可以是 3,例如当它是第 5 行中的组合框已更改时...

标签: c# wpf mvvm


【解决方案1】:

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

我猜是基本的初学者 MVVM 错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-03
    • 2012-05-17
    • 2017-10-12
    • 2011-07-02
    • 1970-01-01
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多