C# UWP组合框SelectedItem忽略其绑定值
为了说明成功和失败,我将使用以下后端。在每种情况下,我都有一个事物数组和一个设置为array.First()的属性 因此,这里是一个绑定结果,它会导致C# UWP组合框SelectedItem忽略其绑定值,c#,combobox,uwp,C#,Combobox,Uwp,为了说明成功和失败,我将使用以下后端。在每种情况下,我都有一个事物数组和一个设置为array.First()的属性 因此,这里是一个绑定结果,它会导致SelectedItem中的项被选中 <ComboBox ItemsSource="{x:Bind Strings}" SelectedItem="{x:Bind FirstString}"> <ComboBox.ItemTemplate> <Dat
SelectedItem
中的项被选中
<ComboBox ItemsSource="{x:Bind Strings}"
SelectedItem="{x:Bind FirstString}">
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="system:String">
<TextBlock Text="{x:Bind}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
这是无法选择的备用项目的相同代码
<ComboBox ItemsSource="{x:Bind Items}"
SelectedItem="{x:Bind FirstItem}">
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="local:Item">
<TextBlock Text="{x:Bind Index}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
此外,只要我打开Mode=TwoWay
,就会在初始绑定期间清除VM中的值
所以我的问题是,为什么?造成这种情况的原因是什么?非常有趣的问题。事情是这样的 基本上,您所做的是每次返回一个新的项目集合,而不是缓存它。由于Items getter被调用两次,一次从ItemsSource绑定调用,一次从FirstItem绑定调用,所以集合被实例化两次 由于项是引用类型,项{Index=1}的两个实例不相等,因此它们不匹配,并且所选项绑定不起作用。它适用于字符串,因为这些是值类型,“1”仍然等于“1”,即使它们是不同的实例 要解决此问题,您需要在每次调用项目的getter时缓存并返回相同的项目实例:
public MainPage()
{
...
Items = new Item[] {...};
...
FirstItem = Items.First();
}
public Item[] Items {get;set;}
您的输出窗口显示什么?这里有一个非常有趣的问题。我将在今后的面试中使用它:)谢谢Alex。不幸的是,这是我遇到的问题的简化版本,到目前为止,这还没有解决我的应用程序中的问题。(稍后跟进问题:-)
public MainPage()
{
...
Items = new Item[] {...};
...
FirstItem = Items.First();
}
public Item[] Items {get;set;}