我是一些应用程序,我想将一些文本框和chekcbox绑定到Dictionary(Enum,string)的值字段。这有可能,我该怎么做?
在xaml代码中我有这样的东西 - 它适用于Dictionary,字符串作为键,但它无法正确绑定到带枚举的键
<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中所拥有的东西
public enum MyEnum
{
PrimaryAddress,
SecondaryAddress,
UsePrimaryAddress
}
在ViewModel字典中定义为:
public Dictionary<MyEnum, string> Properties
我找到了带有枚举值的combobox解决方案,但这并不适用于我的情况。
有什么建议吗?
答案 0 :(得分:10)
您必须在绑定表达式中为索引器的参数设置适当的类型。
查看型号:
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();
}
}
有关详细信息,请参阅“Binding Path Syntax”。