问题在于显示多个组合框的表单-每个表单的内容都是整数范围。可以有多个组合框,并且每个组合框的整数范围可以不同,并且这些信息都不会提前知道。
XAML中这些组合框的数据模板是这个
<DataTemplate x:Key="ListComboboxTemplate">
<ComboBox Margin="0,0,0,0" MinWidth="230" Height="22" ItemsSource="{Binding Path=DataContext.ListBoxContent, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
... >
ListBoxContent属性是字符串的ObservableCollection(我不知道为什么它是可观察的-内容一旦设置,就不会更改)。
当存在两个或两个以上具有整数范围的组合框且范围不同时,将显示此错误-加载它们的循环仅将其计算的列表分配给ListBoxContent属性;结果是所有组合框都具有相同的范围(当然,这是最后一个计算出的范围)。
我正在猜测我需要的ViewModel,而不是简单的列表,而是像字典那样的东西,键到一个字符串*,其值是字符串的ObservableCollection。
*显示的表单在组合框的左侧具有一个文本框,该文本框绑定到字符串属性-此值将是字典的键。
我对如何做到这一点不知所措。我认为某种命令可以设置组合框的内容,但我不知道如何获取该命令所需的密钥。我也可能偏离这个想法。
答案 0 :(得分:0)
您可能应该有一个视图模型,其中包含一个项目列表,每个项目都有另一个ComboBox项目列表:
public class ListItem
{
public IEnumerable<string> ComboBoxItems { get; set; }
}
public class ViewModel
{
public ObservableCollection<ListItem> ListItems { get; }
= new ObservableCollection<ListItem>();
}
并使用ItemsControl对其进行可视化:
<ItemsControl ItemsSource="{Binding ListItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding ComboBoxItems}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
像这样初始化它:
public MainWindow()
{
InitializeComponent();
var vm = new ViewModel();
vm.ListItems.Add(new ListItem { ComboBoxItems = new string[] { "1.1", "1.2" } });
vm.ListItems.Add(new ListItem { ComboBoxItems = new string[] { "2.1", "2.2" } });
DataContext = vm;
}
在ViewModel类中甚至没有必要具有ObservableCollection。
答案 1 :(得分:0)
我最终创建了一个字符串列表列表。
调用绑定属性的Get()时,那里有一个函数可以检索列表中的下一个列表并将其传递。
这有点俗气,但这也是最小的代码更改。