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



我有一个枚举,我需要绑定到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;
}
}

我尝试在中途实现查找祖先方法,但卡住了。

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

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

我能够通过实现这样的视图模型来解决这个问题:

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

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

像这样类似的东西:

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

我认为最好的解决方案是实现anonymous_apple回答的视图模型。然后在组合框中,您可以进一步拥有一个包含 TextBlock 的数据模板。在文本块中,您将文本设置为:Text="{Binding }"。

^^这解决了我的问题,也应该解决了你的问题......

最新更新