【发布时间】:2019-02-19 01:39:50
【问题描述】:
我有一个 枚举,我需要将其绑定到 ComboBox。 ComboBox 位于 数据模板标签 内。如何将枚举绑定到 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" />
我正在尝试将枚举状态填充到我的组合框中,但它失败了。但是,现在我正在尝试按照 Steven 所述的解决方案实施,但仍然无法正常工作。
【问题讨论】:
-
Enums可以转换为int,int可以存储在组合框中。请记住,Enums通常是首选,以提高后面代码的可读性。而不是让他们的名字成为前端程序的实际部分。 -
@Steven 请再次查看我的问题。这里的问题是将状态绑定到组合框。如果我在数据模板之外有组合框,我可以成功绑定它。
-
你能从 datatemplate 访问 dataFromEnum 吗?假设,即。它是一个字符串数组?
-
ItemsSource 完全相同。 DataTemplate 也应该被定义为一个资源。
标签: c# wpf enums combobox binding