数据绑定到一个组合框,两个列表对象,选择的值应该被复制并显示

本文关键字:复制 显示 选择 两个 一个 组合 列表 数据绑定 对象 | 更新日期: 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数据绑定工作。所以,如果有人有一个真正的答案,请随时戳我,这样我就可以更新这个。