首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >MVVM将combobox内容绑定到字典中的列表

MVVM将combobox内容绑定到字典中的列表
EN

Stack Overflow用户
提问于 2018-07-18 22:25:28
回答 2查看 432关注 0票数 0

问题出在显示多个组合框的表单上--每个组合框的内容都是一个整数范围。可以有多个组合框,每个组合框的整数范围可以不同,并且这些信息都不是事先知道的。

XAML中这些组合框的DataTemplate如下所示

代码语言:javascript
运行
复制
<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 (我不知道为什么它是可观察的-内容一旦设置就不会改变)。

当有2个或更多具有整数范围的组合框并且范围不同时,错误就会出现-加载它们的循环只是将它计算的列表分配给ListBoxContent属性;结果是所有组合框都以相同的范围结束(这当然是计算出的最后一个)。

我猜我需要的是ViewModel,而不是一个简单的列表,就像字典一样,键控到一个字符串*,值是字符串的ObservableCollection。

*显示的窗体在绑定到字符串属性的组合框的左侧有一个文本块-此值将是字典的键。

我不知道如何在不打破常规的情况下做到这一点。我认为是某种设置组合框内容的命令,但我不知道如何获得命令所需的键。基于这种想法,我也可能大错特错。

EN

回答 2

Stack Overflow用户

发布于 2018-07-18 22:39:07

您可能应该有一个包含项目列表的视图模型,每个项目都有另一个用于ComboBox的项目列表:

代码语言:javascript
运行
复制
public class ListItem
{
    public IEnumerable<string> ComboBoxItems { get; set; }
}

public class ViewModel
{
    public ObservableCollection<ListItem> ListItems { get; } 
        = new ObservableCollection<ListItem>();
}

并使用ItemsControl将其可视化:

代码语言:javascript
运行
复制
<ItemsControl ItemsSource="{Binding ListItems}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ComboBox ItemsSource="{Binding ComboBoxItems}"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

如下所示进行初始化:

代码语言:javascript
运行
复制
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。

票数 0
EN

Stack Overflow用户

发布于 2018-07-19 18:56:02

我最终创建了一个字符串列表。

当绑定属性的Get()被调用时,有一个函数可以检索列表中的下一个列表并传递它。

这有点俗气,但也是最小的代码更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51404555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档