这不是一个问题,而是一个答案,答案似乎对某些人来说非常明显,但我认为它可能对其他人有用!
我首先发布了这个帖子。情景就在答案中。
答案 0 :(得分:0)
我有一个MainView / MainViewModel和一个SearchView / SearchViewModel。
我在MainView上有一个ComboBox,上面填充了一个'Gender'对象列表(绑定到
ObservableCollection<Gender> Genders
MainViewModel中的
MainViewModel具有Person类型的属性,而该属性又具有Gender类型的属性。 Gender对象具有ID和Description属性(描述显示在组合中)。
ComboBox的SelectedItem属性在TwoWay模式下绑定到'Person.Gender'。
当使用它在新的Person对象上设置Gender的值时,一切都很好。然后允许用户搜索现有的Person。我根据参数检索数据并创建了一个Person对象列表,并通过MVVM Light Toolkit的Messenger将它们传递给SearchViewModel。然后,它们以模态方式显示在SearchView的网格中。当用户选择Person时,这个(SelectedPerson)从SearchViewModel传回到MainViewModel,再次使用MVVM Light的Messenger。
这是我被困一段时间的地方。我编码了
Person.Gender = SelectedPerson.Gender
并期望使用正确的性别更新ComboBox,但事实并非如此。
我搜索了绑定问题,并找到了一个关于以正确的顺序拥有XAML ItemsSource和SelectedItems属性的问题。我尝试创建一个新的性别,例如 Person.Gender = new Gender {ID = SelectedPerson.Gender.ID ...等但这不起作用。
然后我突然意识到,尽管ComboBox中的Gender与SelectedPerson对象中的Gender具有完全相同的属性,但它并没有使它成为EQUAL而是我在考虑人类而不是编程术语。 DID等于ComboBox上的那个的Gender对象位于ComboBox绑定的集合中(即ObservableCollection Genders)。因此,为了得到它,我做了这个
if (SelectedPerson.Gender != null)
{
foreach (Gender g in Genders)
{
if (SelectedPerson.Gender.ID == g.ID)
{
Person.Gender = g;
break;
}
}
}
正如我所说,这对某些人来说可能是显而易见的,但是当我最初被卡住时,我没有找到任何看起来像这样的解决方案,因为没有人描述这样的场景。我猜想在某些情况下场景是相似的,但提问者没有意识到,即对象的相等性。