以枚举为键绑定到字典中的值 [英] binding to value in Dictionary with enum as a key

查看:20
本文介绍了以枚举为键绑定到字典中的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是一些应用程序,我想将一些文本框和复选框绑定到 Dictionary(Enum, string) 的值字段.这可能吗?我该怎么做?

I'm some application and i would like to bind some textboxes and chekcboxes to value field of Dictionary(Enum, string). Is this possible and how can I do that?

在 xaml 代码中,我有类似的东西 - 它适用于以字符串为键的字典,但它无法正确绑定到带有枚举的键

In xaml code I have something like this - it is working for Dictionary with string as a key, but it cannot correctly bind to key with enum

<dxe:TextEdit EditValue="{Binding Properties[PrimaryAddress],  Mode=TwoWay}" />
<dxe:TextEdit EditValue="{Binding Properties[SecondaryAddress],  Mode=TwoWay}" />
<dxe:CheckEdit EditValue="{Binding Properties[UsePrimaryAddress], Mode=TwoWay}" />

.. 这是我在 Enum 中的内容

.. and here is what I have in Enum

public enum MyEnum
{
    PrimaryAddress,
    SecondaryAddress,
    UsePrimaryAddress
}

在 ViewModel 字典中定义为:

In ViewModel dictionary is defined as:

public Dictionary<MyEnum, string> Properties

我找到了带有枚举值的组合框的解决方案,但这不适用于我的情况.

I have found solution for combobox with enum values but this does not apply to my case.

有什么建议吗?

推荐答案

你必须在绑定表达式中为索引器的参数设置合适的类型.

You have to set appropriate type for indexer's parameter in binding expression.

查看模型:

public enum Property
{
    PrimaryAddress,
    SecondaryAddress,
    UsePrimaryAddress
}

public class ViewModel
{
    public ViewModel()
    {
        Properties = new Dictionary<Property, object>
        {
            { Property.PrimaryAddress, "123" },
            { Property.SecondaryAddress, "456" },
            { Property.UsePrimaryAddress, true }
        };
    }

    public Dictionary<Property, object> Properties { get; private set; }
}

XAML:

<Window x:Class="WpfApplication5.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication5"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>

        <TextBox Grid.Row="0" Text="{Binding Path=Properties[(local:Property)PrimaryAddress]}"/>
        <TextBox Grid.Row="1" Text="{Binding Path=Properties[(local:Property)SecondaryAddress]}"/>
        <CheckBox Grid.Row="2" IsChecked="{Binding Path=Properties[(local:Property)UsePrimaryAddress]}"/>
    </Grid>
</Window>

代码隐藏:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new ViewModel();
    }
}

有关详细信息,请参阅绑定路径语法".

For more info, see "Binding Path Syntax".

这篇关于以枚举为键绑定到字典中的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆