数据绑定到一个组合框,两个列表对象,选择的值应该被复制并显示
本文关键字:复制 显示 选择 两个 一个 组合 列表 数据绑定 对象 | 更新日期: 2023-09-27 18:13:19
问题:
组合框在启动时没有显示选中的项目。确切地说:Item和Value为空,index为-1,valuepath为空。虽然绑定本身的功能似乎可以工作,但它只是在启动时拒绝显示值。
我想做的:
我有两个对象列表。ListOne是所有可用对象的完整列表。list2是从列表1中的对象中选出21个"选定"对象的列表。
所以我想将ListOne绑定到一个包含要显示的对象的名称值的组合框。同时,选中的对象应该绑定到ListTwo[index]。基本上,如果我改变组合框中的选择,我希望ListTwo[index]是现在选择对象的副本。
我现在拥有的:
正在讨论的对象:
public class Rezept
{
public string strName { set; get; }
public string strSomething { set; get; }
}
XAML-Code:
<ComboBox x:Name="comboboxName" ItemsSource="{Binding listOne}" SelectedValue="{Binding listTwo[0], Mode=TwoWay}" DisplayMemberPath="strName"/>
这似乎是工作,因为在选择一些更新list2就好。但是在启动时,组合框没有选择任何内容。
另一个xml代码尝试:
<ComboBox x:Name="comboboxName" ItemsSource="{Binding listOne}" SelectedItem="{Binding listTwo[0], Mode=TwoWay}" DisplayMemberPath="strName"/>
这似乎与第一个完全相同,尽管它听起来更"正确"。
在XAML:
上尝试三个<ComboBox x:Name="comboboxName" ItemsSource="{Binding listOne}" SelectedItem="{Binding listTwo[0], Mode=TwoWay}" DisplayMemberPath="strName" SelectedValue="{Binding listTwo[0].strName}"/>
这改变不了什么。绑定到SelectedValuePath似乎也没有。
我必须改变什么,使组合框实际上显示ListTwo[0]启动?我确实确保ListTwo[0]实际上有正确的值。在UI加载后,它确实在启动时被xml文件填充。这是需要一个"OnPropertyChanged"事件的情况下?如果有,在哪里?我想不出别的办法了。这里还需要帮忙:-(
不是绑定SelectedValue
属性,而是绑定SelectedItem
属性,如下所示:
<ComboBox x:Name="comboboxName" ItemsSource="{Binding listOne}" SelectedItem="{Binding listTwo[0], Mode=TwoWay}" DisplayMemberPath="strName"/>
所以,既然没有人似乎有一个解决方案(包括我自己经过另一个5天的搜索),我至少会发布我的非常肮脏的工作方法。
我制作了一个列表,其中我通过循环添加了每个有问题的组合框(21个)。然后我做了另一个循环,手动设置每个组合框中listOne的索引,以匹配list2中的正确值。它会检查哪个索引包含正确的名称并设置为
for(int i = 0, i < 21, i++)
{
listCombo[i].SelectedIndex = listOne.IndexOf(listOne.Where(x => x.name == listTwo[i].name).First();
}
这只需要在程序启动时调用一次,因为listTwo实际上以正确的顺序具有正确的值(在XML保存文件中也可以看到)。
我仍然宁愿找出这应该如何在XAML数据绑定工作。所以,如果有人有一个真正的答案,请随时戳我,这样我就可以更新这个。