0

今天我在这个问题上花了很长时间,所以我把它作为一个问题发布,然后发布答案,这样就可以避免我在过去 183 分钟里经历的那种挫败感。

这是我的源代码的简单版本(也许你的看起来像这样)

.xaml(视图):

<ComboBox SelectedItem="{Binding WindDirection}" ItemsSource="{Binding WindDirections}" DisplayMemberPath="DisplayText" IsEditable="False"/>

.cs(视图模型):

public class WindDirectionViewModel{
   //I realize that there may be problems in this code, it's not my real code, just a quick sample

   ...code

   List<WindDirectionObject> WindDirections = new List<WindDirectionObject>();
   WindDirectionObject WindDirection = new WindDirectionObject(); 

   ...code

   public string DisplayText = WindDirections.First(x => x.Equals(WindDirection)).DisplayString;

   ...code

}

所有代码都可以完美运行,并且相同的 (.cs) ViewModel 甚至可以在另一个 (.xaml) 视图中正确显示,但在视图中它无法正常工作。确切的问题是第一次打开视图时 ComboBox 中没有文本,即使 DisplayText 有一个值!断点显示 DisplayText 值正在正确计算以及所有内容,但在第一次打开视图时不会显示该值。

4

1 回答 1

1

如果您DisplayMemberPath在 .xaml 组合框中使用该属性 - 您必须将该属性放在 .xaml 中的ItemsSource属性之前SelectedItem...否则DisplayMemberPath不会显示该值。

前:

<ComboBox ItemsSource="{Binding WindDirections}" SelectedItem="{Binding WindDirection}" DisplayMemberPath="DisplayText" IsEditable="False"/>

后:

<ComboBox SelectedItem="{Binding WindDirection}" ItemsSource="{Binding WindDirections}" DisplayMemberPath="DisplayText" IsEditable="False"/>

巴姆。完美运行。这可能无法解决您的问题,但它肯定解决了我的问题……希望这能加快您的开发时间。:)

于 2018-02-14T17:35:48.590 回答