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。嗯,看起来您已经设法自己解决了它,这很好。:)