WPF 组合框绑定到枚举

发布于 2024-10-19 01:57:35 字数 868 浏览 1 评论 0原文

我有一个组合框,它使用 ObjectDataProvider 将 ItemsSource 绑定到枚举,并且其 SelectedItem 属性绑定到业务对象的属性。 由于某种原因,它首先绑定 SelectedItem,然后绑定 ItemsSource,因此覆盖了我对 Businessobject 属性的默认设置。有什么想法以及可能的修复方法吗? 提前致谢。

XAML:

<CollectionViewSource x:Key="Units">
     <CollectionViewSource.Source>
          <ObjectDataProvider MethodName="GetNames" ObjectType="{x:Type sys:Enum}">
               <ObjectDataProvider.MethodParameters>
                    <x:Type TypeName="BO:Unit"/>
               </ObjectDataProvider.MethodParameters>
          </ObjectDataProvider>
     </CollectionViewSource.Source>
</CollectionViewSource>

<ComboBox Grid.Column="1" HorizontalAlignment="Right" Width="80"
          ItemsSource="{Binding Source={StaticResource Units}}" 
          SelectedItem="{Binding Path=Unit}"/>

I have a Combo Box that has ItemsSource Bound to an Enumeration using ObjectDataProvider, and its SelectedItem Property is bound to a property of a businessobject.
For some reason it's binding SelectedItem first and ItemsSource second, therefore overwriting my default on the businessobject property. Any ideas why and possibly a fix?
Thanks in Advance.

XAML:

<CollectionViewSource x:Key="Units">
     <CollectionViewSource.Source>
          <ObjectDataProvider MethodName="GetNames" ObjectType="{x:Type sys:Enum}">
               <ObjectDataProvider.MethodParameters>
                    <x:Type TypeName="BO:Unit"/>
               </ObjectDataProvider.MethodParameters>
          </ObjectDataProvider>
     </CollectionViewSource.Source>
</CollectionViewSource>

<ComboBox Grid.Column="1" HorizontalAlignment="Right" Width="80"
          ItemsSource="{Binding Source={StaticResource Units}}" 
          SelectedItem="{Binding Path=Unit}"/>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

泼猴你往哪里跑 2024-10-26 01:57:36

我尝试了您的代码,它工作正常,所以我认为绑定的顺序不是您的问题。我注意到的一件事是,您使用 GetNames 作为 ObjectDataProvider 的 MethodName,因此 ComboBox ItemsSource 将是字符串集合,而不是枚举Unit。如果这是您的意图,那么属性 Unit 的类型应为 string

Example

public class NamesViewModel
{
    public NamesViewModel(string unit)
    {
        Unit = unit;
    }
    public string Unit
    {
        get;
        set;
    }
}

如果您将 GetNames 更改为 GetValues 它将适用于枚举类型 Unit

示例的属性

public class ValuesViewModel
{
    public ValuesViewModel(Unit unit)
    {
        Unit = unit;
    }
    public Unit Unit
    {
        get;
        set;
    }
}

I tried your code and it's working fine so I don't think that order of the Bindings is your problem. One thing I noticed is that you're using GetNames as the MethodName for the ObjectDataProvider so the ComboBox ItemsSource will be a Collection of strings and not of the enum Unit. If this is your intention then the Property Unit should be of type string

Example

public class NamesViewModel
{
    public NamesViewModel(string unit)
    {
        Unit = unit;
    }
    public string Unit
    {
        get;
        set;
    }
}

If you change GetNames to GetValues it'll work for a Property of enum type Unit

Example

public class ValuesViewModel
{
    public ValuesViewModel(Unit unit)
    {
        Unit = unit;
    }
    public Unit Unit
    {
        get;
        set;
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文