Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将枚举绑定到数据模板内的组合框中_C#_Wpf_Enums_Combobox_Binding - Fatal编程技术网

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

C# 如何将枚举绑定到数据模板内的组合框中,c#,wpf,enums,combobox,binding,C#,Wpf,Enums,Combobox,Binding,我有一个枚举,需要绑定到一个组合框。组合框位于数据模板标记内。如何将枚举绑定到组合框中 这是枚举: public enum Status { Enable, Disable } 这是xaml: <Window.Resources> <cv:StatusToBooleanConverter x:Key="statusToBooleanConverter"/> <ObjectDataProvider x:Key="dataFromEn

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

这是枚举:

 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>

以下是viewmodel代码:

public List<Status> status;

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

            return status;
        }
    }
公共列表状态;
公共列表状态字符串
{
收到
{
foreach(System.Enum.GetValues(typeof(Status))中的列表iColor)
{
状态=iColor;
}
返回状态;
}
}
我尝试了半路来实现查找祖先的方法,但失败了

<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" />


我正在尝试将枚举状态填充到组合框中,但失败。但是,现在我正试图实现Steven所述的解决方案,但它仍然不起作用。

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

类似的情况如下:

public Status status = Status.Enable;

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

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

        }

    }

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

public Status status = Status.Enable;

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

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

        }

    }
public Status Status=Status.Enable;
公共列表状态字符串{
收到
{
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"/>


enum
可以转换为
int
,并且
int
可以存储在组合框中。请记住,
enum
通常是首选的,以确保代码背后的可读性。不要让他们的名字成为前端程序的一部分。@Steven请再次查看我的问题。这里的问题是将状态绑定到组合框。如果我的组合框位于数据模板之外,我可以成功绑定它。您可以从datatemplate访问dataFromEnum吗?假设,对于ie,它是一个字符串数组?ItemsSource完全相同。DataTemplate也应该被定义为一个资源。到底是什么不起作用?您是否收到排序或错误消息?我定义数据源的方式与您的不同。仅使用
datasource=“Statusstring”
,但我认为这是因为我使用的是ASP.NET,而不是wpf。实际上,没有显示错误消息,但当我尝试您的方法时,它仅在所有行中将Enable显示为状态,即使我只有几行status为Disable。是的,我正在使用wpf。嗯,看起来您已经设法自己解决了它,这很好。:)