我遇到一些绑定问题,我有ObservableCollection
个字符串和所有我的组合框下拉项。应该可以从下拉菜单中选择一个值,也可以手动插入一些文本或组合这两种方法。
<ComboBox ItemsSource="{Binding AvailableAddressSymbols}"
Text="{Binding SelectedItem.LowerBound,
ElementName=combobox_sys_data_protection}"
HorizontalAlignment="Right"
IsEditable="True"
DropDownOpened="SymbolAddressRefress_Dropdownopend" />
<ComboBox ItemsSource="{Binding AvailableAddressSymbols}"
Text="{Binding SelectedItem.UpperBound,
ElementName=combobox_sys_code_protection}"
IsEditable="True"
DropDownOpened="SymbolAddressRefress_Dropdownopend" />
我绑定到该组合框的text属性以允许手动编写文本。一切都很好,但我有一个以上的组合框。 组合框的可用项目在下拉打开时刷新。
现在出现问题:当我在combobox1中选择一个值并且我想在combobox2中选择一个值时,来自combobox1的vaule被设置为&#34; &#34 ;;
刷新清除项目列表并添加新值,我认为这是问题,但我需要刷新它,因为可能会有新值。
internal void refreshAvailableAddressSymbols()
{
AvailableAddressSymbols.Clear();
for (int i = 0;
i < Database.ProjectConfiguration.AddressSymbols.Count;
i++)
{
AvailableAddressSymbols.Add(
Database.ProjectConfiguration
.AddressSymbols[i].StartAddress);
AvailableAddressSymbols.Add(
Database.ProjectConfiguration
.AddressSymbols[i].EndAddress);
}
}
答案 0 :(得分:1)
一些背景知识:
在WPF中ComboBox
,SelectedItem
必须是下拉列表中的一个 - Items
。
这意味着:当您Clear()
ObservalCollection绑定到ItemsSource
时,上述条件不再成立且ComboBox
清除SelecetdItem
。
为避免这种情况,有两种策略:
在本地变量中记住您选择的项目,清除项目, 将项目设置为新的集合ans然后将SelectedItem设置为项目 可在下拉列表中找到。
不要Clear()
你的主题,而是更新列表(添加新的,
删除旧的元素)。只要你不删除
SelectedItem
一切正常