以编程方式设置枚举绑定组合框的值

本文关键字:组合 绑定 枚举 编程 方式 设置 | 更新日期: 2023-09-27 18:35:52

我正在使用这个:将枚举属性数据绑定到我的组合框的 WPF 数据绑定中的组合框。 不过,我无法以编程方式设置组合框的值。 绑定后,我无法设置"选定项"、"选定值"或"文本"。

一定有办法做到这一点吗? 任何帮助,不胜感激。

为了澄清,我有一个组合框绑定到一个包含所有 50 个状态的枚举。 我有一个与 comboBox 绑定到的枚举类型相同的状态值。 我想将组合框值设置为我的状态的值。

以编程方式设置枚举绑定组合框的值

如果将组合框的 SelectedItem 绑定到基础类,则应该能够通过更改该类来更改绑定。

例如,假设您的枚举名为"Country",您有一个名为"Person"的类,并且该人员具有名为"CountryOfOrigin"的属性,并且您希望将其绑定到 ComboBox。 你可以这样做:

XAML 文件:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:TestingWPF"
    x:Class="TestingWPF.TestWindow">
    <Window.Resources>
        <ObjectDataProvider MethodName="GetValues"
        ObjectType="{x:Type local:Country}"
        x:Key="Countries">
            <ObjectDataProvider.MethodParameters>
                <x:Type TypeName="local:Country" />
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
    </Window.Resources>
    <StackPanel>
        <ComboBox x:Name="comboBox"
              HorizontalAlignment="Center"
              VerticalAlignment="Center"
              Width="100" Margin="10"
              ItemsSource="{Binding Source={StaticResource Countries}}"
              SelectedItem="{Binding Path=CountryOfOrigin, Mode=TwoWay}"/>
        <Button HorizontalAlignment="Center" Content="Change Country to Mexico" Margin="10" Click="Button_Click"/>
    </StackPanel>
</Window>

代码隐藏:

public partial class TestWindow : Window
{
    Person p;
    public TestWindow()
    {
        InitializeComponent();
        p = new Person();
        p.CountryOfOrigin = Country.Canada;
        DataContext = p;
    }
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        p.CountryOfOrigin = Country.Mexico;
    }
}
public enum Country
{
    Canada,
    UnitedStates,
    Mexico,
    Brazil,
}
public class Person : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private Country _countryOfOrigin;
    public Country CountryOfOrigin
    {
        get
        {
            return _countryOfOrigin;
        }
        set
        {
            if (_countryOfOrigin != value)
            {
                _countryOfOrigin = value;
                PropertyChanged(this, new PropertyChangedEventArgs("CountryOfOrigin"));
            }
        }
    }
}

我发现这篇文章在使用绑定到 ComboBox 的枚举时非常有用,还有一些示例说明了如何使用其属性值组织显示枚举的转换。
因此,用户可以看到 f.e. ">"符号,而不是名为 Greater 的枚举