如何将枚举绑定到数据模板内的组合框

时间:2018-09-14 09:09:59

标签: c# wpf enums combobox binding

我有一个枚举,我需要绑定到组合框。组合框位于数据模板标记内部。如何将枚举绑定到ComboBox中?

这是枚举:

 public enum Status
{
    Enable,
    Disable
}

这是xaml:

<Window.Resources>
    <cv:StatusToBooleanConverter x:Key="statusToBooleanConverter"/>
    <ObjectDataProvider x:Key="dataFromEnum" MethodName="GetValues" ObjectType="{x:Type sys:Enum}">
        <ObjectDataProvider.MethodParameters>
            <x:Type TypeName="enum:Status"/>
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>
</Window.Resources>
<DataTemplate>
  <StackPanel>
     <ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type DataGrid}}, 
     Path=DataContext.Statusstring}" x:Name="cbProductionLineStatus" 
     FlowDirection="LeftToRight" FontSize="16" Foreground="MidnightBlue" 
     HorizontalAlignment="Stretch" VerticalAlignment="Center"/>
   </StackPanel>    
</DataTemplate>

这是视图模型代码:

public List<Status> status;

    public List<Status> Statusstring
    {
        get
        {
            foreach (List<Status> iColor in System.Enum.GetValues(typeof(Status)))
            {
                status =  iColor;
            }

            return status;
        }
    }

我尝试半途实现Find祖先方法,并陷入困境。

<ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type DataGrid}},
                                Path=?}" SelectedValue="{Binding ProductionLineStatus,Mode=TwoWay}" SelectedValuePath="ProductionLineStatus" DisplayMemberPath="ProductionLineStatus" x:Name="cbProductionLineStatus" FlowDirection="LeftToRight" FontSize="16" Foreground="MidnightBlue" 
                                HorizontalAlignment="Stretch" VerticalAlignment="Center" />

我正在尝试将枚举状态填充到我的组合框中,但是失败了。但是,现在我试图按照史蒂文所说的解决方案实施,但仍然无法正常工作。

2 个答案:

答案 0 :(得分:1)

我可以通过实现如下视图模型来解决此问题:

public Status status = Status.Enable;

    public List<string> Statusstring {
        get
        {
            return System.Enum.GetNames(typeof(Status)).ToList();

        }

    }

这是我的xaml:

 <ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type DataGrid}},
                                Path=DataContext.Statusstring}" SelectedValue="{Binding ProductionLineStatus, Converter={StaticResource statusToBooleanConverter}, Mode=TwoWay}" x:Name="cbProductionLineStatus" FlowDirection="LeftToRight" FontSize="16" Foreground="MidnightBlue" 
                                HorizontalAlignment="Stretch" VerticalAlignment="Center"/>

答案 1 :(得分:0)

我想我可以通过编写一个属性并在组合框中使用该属性来解决它:

像这样的东西:

public Status status = Status.Enable;

public string Statusstring
{
    get
    {
        if (status == Status.Enable)
            return "Enable";
        else
            return "Disable";
    }
}