首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用整数集合绑定ComboBox

使用整数集合绑定ComboBox
EN

Stack Overflow用户
提问于 2020-05-19 19:42:00
回答 3查看 47关注 0票数 0

完全相同的代码可以很好地处理字符串集合,但对于整型却会失败。

我的代码(删除了不必要的部分以使事情变得清晰):

XAML:

代码语言:javascript
复制
        <ComboBox Name="Id" 
                  Grid.Row="5"
                  SelectedItem="{Binding Id}" 
                  ItemsSource="{Binding Ids}" 
                  Style="{StaticResource MaterialDesignComboBox}"
                  IsEnabled="True"
                  IsEditable="False"
                  IsReadOnly="True"/>

ViewModel:

代码语言:javascript
复制
    class ViewModel : BaseViewModel, INotifyPropertyChanged
    {
        public ObservableCollection<int> Ids { get; set; }

        new public event PropertyChangedEventHandler PropertyChanged;
    }
代码语言:javascript
复制
    public class BaseViewModel : INotifyPropertyChanged
    {
        public int Id { get; set; }

        public event PropertyChangedEventHandler PropertyChanged;
    }

(代码和名称已调整,以表示问题,但忽略了不必要的信息)

列表已填充,我可以选择其中一个选项,但选择的选项为空。用户无法辨别已选择的内容。有什么建议这里出了什么问题?

编辑

将每个整数解析为字符串(并将集合更改为字符串)可以解决此问题。我不知道,看起来ComboBox不喜欢整数。

EN

回答 3

Stack Overflow用户

发布于 2020-05-19 19:59:39

我认为这里的问题是,您的ComboBox具有名称"Id“,并且您希望绑定到具有相同名称的属性。如果您不使用ComboBox的名称,我建议您将其删除。否则,您可以将其重命名。

编辑:当然你的视图模型必须包含"Id"-property:

代码语言:javascript
复制
public class ViewModel : INotifyPropertyChanged
{
    public ObservableCollection<int> Ids { get; set; }
    public int Id { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;
}
票数 0
EN

Stack Overflow用户

发布于 2020-05-20 01:14:16

即使您删除了一些其他代码,您也可以使用类型为int的ID属性在相同的命名空间‘ObservableCollection ViewModel’中创建一个新类,并将该类用作您的类的类型。然后在ComboBox中,将SelectedValuePath设置为ID,并将SelectedValue绑定回BaseViewModel类中的Id属性。

最后,您应该能够删除“ViewModel类”中对INotifyPropertyChanged的引用,因为当使用BaseViewModel作为基类时,应该会自动继承这个引用。

就像这样..。

C#

代码语言:javascript
复制
public class ViewModel : BaseViewModel
{
     public ObservableCollection<ComboBoxIDClass> Ids { get; set; }
}

public class ComboBoxIDClass : INotifyPropertyChanged
{
     public int ID { get; set; }

     public event PropertyChangedEventHandler PropertyChanged;
}

XAML

代码语言:javascript
复制
<ComboBox Name="Id" Grid.Row="5" ItemsSource="{Binding Ids}" SelectedValuePath="ID" SelectedValue="{Binding Id}" Style="{StaticResource MaterialDesignComboBox}" IsEnabled="True" IsEditable="False" IsReadOnly="True"/>
票数 0
EN

Stack Overflow用户

发布于 2020-05-20 02:40:19

尝试将绑定模式更改为TwoWay:

代码语言:javascript
复制
<ComboBox Name="Id" 
              Grid.Row="5"
              SelectedItem="{Binding Id, Mode=TwoWay}" 
              ItemsSource="{Binding Ids}" 
              Style="{StaticResource MaterialDesignComboBox}"
              IsEnabled="True"
              IsEditable="False"
              IsReadOnly="True"/>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61890182

复制
相关文章

相似问题

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