[WPF]DataGridTemplateColumn使用ComboBox绑定Dictionary细节记录

这段时间一直在进行WPF的开发,研究了ComboBox这个控件2天,发现了很多细节,这里分享给大家,也做一个自己的备忘。

这里主要对ComboBox这个控件对于绑定dictionary所用到的属性的设置问题。

先上Xaml代码:

<DataGridTemplateColumn>
                                                <DataGridTemplateColumn.Header>
                                                    <TextBlock Width="95" HorizontalAlignment="Center" Margin="5" FontSize="13" Foreground="#FF7092BE">型号</TextBlock>
                                                </DataGridTemplateColumn.Header>
                                                <DataGridTemplateColumn.CellTemplate>
                                                    <DataTemplate>
                                                        <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
                                                            <TextBlock Text="{Binding Path=G_TypeNameDicNoStr}"></TextBlock>
                                                        </StackPanel>
                                                    </DataTemplate>
                                                </DataGridTemplateColumn.CellTemplate>
                                                <DataGridTemplateColumn.CellEditingTemplate>
                                                    <DataTemplate>
                                                        <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
                                                            <ComboBox Name="CB_GunTypeName" ItemsSource="{Binding Path=GunNameTypeDic}" DisplayMemberPath="Value" SelectedItem="{Binding Path=G_TypeNameDicNoStr}" FocusVisualStyle="{x:Null}"></ComboBox>
                                                        </StackPanel>
                                                    </DataTemplate>
                                                </DataGridTemplateColumn.CellEditingTemplate>
                                            </DataGridTemplateColumn>


这里先介绍下这段代码背景,方便大家研究。

我将ComboBox写在了一个DataGridTemplateColumn中,作为DataGrid的一列。我的目的很简单,就是想要从数据库获取枪支名称字典Dictionary,也就是GunNameTypeDic。

用户在使用的时候,可以动态的增加数据库中Dictionary表中的值,这样,这个ComboBox就可以增加选项。


然后,在查找了很多资料以后,网上大多都是ComboBox绑定对象,枚举等。所以,在实现的时候遇到了很多困难,网上都没法解决。


这里分享给大家解决方法:

主要是在xaml中 ComboBox控件的几个重要的属性:

1.ItemsSource 这个属性直接关系到会在ComboBox中显示的下拉菜单所指定的内容。比如,这里我就是指定了一个Dictionary对象。让ComboBox显示Dictionary中的内容。

2.DisplayMemberPath 这个属性是指定ItemsSource中想要具体呈现到界面的内容。比如,这里我指定为“Value”。因为ComboBox的ItemsSource绑定的是一个Dictionary对象,其中包含很多键值对(KeyValuePair),KeyValuePair含有Key和Value属性,我这里是Dictionary<int, string>,所以我想要显示string的内容,就应该把DisplayMemberPath 写成Value。说个题外话,如果ItemsSource绑定的是一个某种对象的集合,那么这个DisplayMemberPath指定的是这个对象下的某个属性。

3.SelectedItem 这个属性。我尝试了用SelectedValue和这个属性互换,在后台cs代码中没有发现什么异同。这里如果有知道详细区别的同学可以交流交流。这里我使用SelectedItem绑定了后台对象的某个string类型的属性。它的作用是当用户选择了ComboBox以后,会将选择的string内容写入到对象实际的值。


下面是后台cs代码:

        private int g_TypeNameDicNo;          //枪型号名

        public int G_TypeNameDicNo
        {
            get {
                return g_TypeNameDicNo; 
            }
            set {
                g_TypeNameDicNo = value; 
            }
        }
        public string G_TypeNameDicNoStr
        {
            get
            {
                return gunNameTypeDic[g_TypeNameDicNo]; //查找Dictionary返回它的Value
            }
            set
            {
                int selectedIndex = 0;
                foreach (KeyValuePair<int, string> pair in gunNameTypeDic)
                {
                    if (pair.ToString().Equals(value))	//对比键值对
                    {
                        selectedIndex = pair.Key;
                    }
                }
                G_TypeNameDicNo = selectedIndex;
            }
        }

        private Dictionary<int, string> gunNameTypeDic;
        public Dictionary<int, string> GunNameTypeDic
        {
            get {
                return gunNameTypeDic;
            }
        }



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值