避免C#

时间:2016-01-19 13:56:03

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

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

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

SelectedA是Viewmodel类的属性,绑定到A WPF视图。 SelectedA.Aid使用组合框进行TwoWay绑定。 我创建了另一个对象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 "/>

在viewmodel类中 我用过

dbvalue = SelectedA;

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

2 个答案:

答案 0 :(得分:0)

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

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

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

    只要目标属性或源属性发生更改,
  • TwoWay就会更新目标属性或属性。
  • OneWay仅在源属性更改时更新目标属性。
  • OneTime仅在应用程序启动或DataContext发生更改时更新目标属性。
  • OneWayToSource在目标属性更改时更新source属性。
  • Default会导致使用目标属性的默认模式值。

Original MSDN article

答案 1 :(得分:0)

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

祝你好运