Silverlight ComboBox TwoWay绑定失败

Silverlight ComboBox TwoWay绑定失败

问题描述:

这不是一个问题,而是一个答案,答案可能对某些人来说显得非常明显,但我认为它可能对其他人有用!Silverlight ComboBox TwoWay绑定失败

我发布了第一个创建帖子。情景是在答案。

我有一个MainView/MainViewModel和一个SearchView/SearchViewModel。

我对填充了“性别”的对象列表中的MainView一个组合框(绑定到

ObservableCollection<Gender> Genders 

在MainViewModel)

的MainViewModel有型人的属性,它反过来又性别类型的属性。 Gender对象具有ID和Description的属性(说明显示在组合中)。

ComboBox的SelectedItem属性以双向模式绑定到'Person.Gender'。

当使用此设置新的Person对象上的Gender的值时,一切都很好。然后允许用户搜索现有的人员。我基于参数检索数据并创建了一个Person对象列表,并通过MVVM Light Toolkit的Messenger将它们传递给SearchViewModel。然后这些以模态方式显示在SearchView的网格中。当用户选择一个人时,这个(SelectedPerson)从SearchViewModel传回到MainViewModel,再次使用MVVM Light的Messenger。

这是现在我卡住了一段时间。我编码为

Person.Gender = SelectedPerson.Gender 

并期望组合框被更新为正确的性别,但事实并非如此。

我搜索了绑定问题,发现了一个关于按正确顺序使XAML ItemsSource和SelectedItems属性的问题。我尝试创建一个新的性别例如 Person.Gender =新性别{ID = SelectedPerson.Gender.ID ...等,但这并没有工作。

然后我想到,尽管ComboBox中的Gender与SelectedPerson对象中的Gender有完全相同的属性,但它并没有使它变为EQUAL,而是用人的术语来思考,而不是编程术语。与ComboBox相同的Gender对象位于ComboBox绑定的集合中(即ObservableCollection Genders)。因此,为了得到它,我这样做

  if (SelectedPerson.Gender != null) 
      { 
       foreach (Gender g in Genders) 
       { 
        if (SelectedPerson.Gender.ID == g.ID) 
        { 
         Person.Gender = g; 
         break; 
        } 
       } 
      } 

正如我所说的,这是可能明显一些,但是当我本来卡住我没有发现,这个样子是没有人描述的场景是这样的任何解决方案。我会冒险猜测,在某些情况下,情景是相似的,但提问者没有意识到,即对象的平等。