【问题标题】:WPF Combo Box selection changed should not update in UI更改的 WPF 组合框选择不应在 UI 中更新
【发布时间】:2014-01-17 01:27:06
【问题描述】:

我正在使用 WPF 组合框。我需要知道如何执行以下操作:当我在弹出的组合框中选择组合框项时,它不应该在内容中更新。只有当我在 MVVM 中使用 Bindings 设置 SelectedItem 时,它才会发生变化。

请给我任何想法。

【问题讨论】:

  • 我是否理解正确,您不希望用户从 ui 设置组合框值?如果是,只需禁用组合框。但是我有一个问题,你为什么使用组合框?...
  • 从弹出窗口中选择项目,将设置内容。您无法停止它,但如果您不想在绑定的 SelectedItem 中设置 popUp 中的选定值,请使用 Binding with Mode=OneWay
  • 实际上,我从组合框中选择值,然后使用 SelectedItem 属性将值赋予某些服务,并从服务中获取响应。得到响应后,我需要显示组合框内容。但是当我选择组合框项时,它会将值传递给服务,但不应在 UI 中更改。收到 UI 的响应后,我需要更新 UI。
  • 虽然有解决方法。我已经发布了答案。看看有没有帮助。!!
  • 我需要双向绑定..

标签: wpf wpf-controls


【解决方案1】:

你可以使用UpdateSourceTrigger=PropertyChanged

<ComboBox Name="cb_users" DisplayMemberPath="Email"  

SelectedItem="{Binding selectedUser,Mode= TwoWay,UpdateSourceTrigger=PropertyChanged}"

ItemsSource="{Binding UserList}"> /ComboBox>

【讨论】:

  • PropertyChanged 不会在这里工作。你验证了吗?
  • 是的,我已经验证,它正在工作。你使用 INotifyPropertyChanged 吗?
【解决方案2】:

从弹出窗口中选择项目,将设置内容。但是,如果您也想停止这种情况,您可以通过 manually updating Target on selectionChanged event 执行此操作,并确保 binding mode is set to OneWay 使更改不会影响到源类中绑定的 selectedItem。

XAML 示例:

<ComboBox ItemsSource="{Binding Objects}"
          SelectionChanged="ComboBox_SelectionChanged"
          SelectedItem="{Binding SelectedPropertyInClass, Mode=OneWay}"/>

在后面的代码中:

private void ComboBox_SelectionChanged(object sender,
                                       SelectionChangedEventArgs e)
{
    var expression = BindingOperations.GetBindingExpression(sender as ComboBox, 
                                                 ComboBox.SelectedItemProperty);
    expression.UpdateTarget();
}

在这里,我们正在获取绑定表达式并在任何选择更改事件上手动更新目标。

【讨论】:

  • 感谢您的回复。我使用 UpdateSourcetrigger=LostFocus 做到了。
  • 只是LostFocus 还是别的什么?
【解决方案3】:

您可以使用 BindingMode 作为 OneWay 来实现相同的目的。

SelectItem="{Binding YourPropertyName Mode=Oneway}"

【讨论】:

    【解决方案4】:

    在 Binding 中设置 BindingMode OneWay。 BindingMode

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-03
      • 2018-04-03
      • 2018-06-24
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多