【问题标题】:Avoid Two way binding between objects in C#避免 C# 中对象之间的双向绑定
【发布时间】:2016-01-19 13:56:02
【问题描述】:

当我将一个类对象的值分配给其他类对象时,当我更改第一个对象的属性时,它会反映在其他对象中。

示例: A 类具有 int Aid 类型的属性

SelectedA 是绑定到 WPF 视图的 Viewmodel 类的属性。 SelectedA.Aid 使用组合框进行双向绑定。 我创建了另一个对象 objectA 并分配了 objectA=SelectedA。

当我更改 objectA.Aid 的组合框值时的问题也发生了变化。

在此先感谢,我需要避免将 objectA 与 SelectedA 绑定。

Vehicle dbvalue
 private Vehicle _selectedA;
 public Vehicle SelectedA
        {
            get { return _selectedA; }
            set
            {
                _selectedA = value;
                RaisePropertyChanged("SelectedA");
            }
        }

 public partial class A
    {
        public int AID { get; set; }
        public string AName { get; set; }
    }

   <ComboBox 
                      DisplayMemberPath="AName"
                      ItemsSource="{Binding items}"
                      SelectedValue="{Binding SelectedA.AID}"
                      SelectedValuePath="AName "/>

在视图模型类中 我用过

dbvalue = SelectedA;

当我更改组合框值时,dbvalue.AID 也会更改。

【问题讨论】:

  • 能否贴出相关代码sn-ps。这将有助于理解问题。话虽如此,如果我理解了您在此处描述的内容,那么您就是在描述预期的行为。
  • @ChrisF 你可以接受这么多代码吗?
  • 然后删除 SelectedValue="{Binding SelectedA.AID}"

标签: wpf mvvm data-binding 2-way-object-databinding


【解决方案1】:

您可以将SelectedValue 绑定的行为设置为仅在源更改时更新。

SelectedValue="{Binding SelectedA.AID, Mode=OneWay}"

这些是从 MSDN 站点提升的绑定模式的其他可能值:

  • TwoWay 在目标属性或源属性发生变化时更新目标属性或属性。
  • OneWay 仅在源属性更改时更新目标属性。
  • OneTime 仅在应用程序启动或 DataContext 发生更改时更新目标属性。
  • OneWayToSource 在目标属性更改时更新源属性。
  • Default 导致使用目标属性的默认 Mode 值。

Original MSDN article

【讨论】:

    【解决方案2】:

    为防止出现此问题,您可以将对象的每个属性设置如下: objectA.AId = SelectedA.AId objectA.AName = SelectedA.AName

    祝你好运

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-06
      • 2011-11-06
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      相关资源
      最近更新 更多