gpt4 book ai didi

c# - 将枚举绑定(bind)到 DataGrid ComboBox View

转载 作者:太空狗 更新时间:2023-10-29 20:11:35 28 4
gpt4 key购买 nike

我正在使用一个 WPF 应用程序,并且我正在开发一个 DataGrid,它结合了必须对事件使用react的动态内容的使用,等等。

对于包含 DataGrid 的 View ,我有以下 ViewModel

public class HiddenFieldPanelViewModel
{
public List<HiddenFieldComponent> HiddenFieldList { get; set; }
public HiddenFieldComponent Component { get; set; }
public bool IsVisible { get; set; }
public enum FieldTypes{Constant,Variable}
public HiddenFieldPanelViewModel()
{
HiddenFieldList = new List<HiddenFieldComponent>();
IsVisible = false;
}
}

适用于此示例的此模型的唯一属性是以下枚举属性

public enum FieldTypes {Constant,Variable}

填充 DataGrid 时我需要做的是将枚举类型绑定(bind)到 DataGrid 单元格中的下拉列表,这是添加后的 DataGrid 集合项之一的示例 enter image description here

例如,在上图中,我希望它具有两个枚举值来自 FieldTypes 枚举。

在我的 XAML 中,我指定了以下内容:

<DataGridTemplateColumn Header="Field Type" CanUserResize="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Height="20" SelectedIndex="0" ItemsSource="{Binding Path=FieldTypes}">
<ComboBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Path=Value}"></Label>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

其他列都正确绑定(bind)了数据,但这一列不是。

我不确定是否有更好的方法来做到这一点。如果需要的话,我还从 IValueConverter 编写了一个 EnumConverter 来处理字符串-枚举-字符串转换。

谢谢

最佳答案

从您的 ViewModel 中提取枚举

public enum FieldTypes
{
Constant,
Variable,
}

// Don't forget to set up your INotifyPropertyChanged on your properties
// if they are being used for binding
public class HiddenFieldPanelViewModel
{
public List<HiddenFieldComponent> HiddenFieldList { get; set; }
public HiddenFieldComponent Component { get; set; }
public bool IsVisible { get; set; }

// removed:
// public enum FieldTypes{Constant,Variable}

// will likely want to set up a property such as:
// public enum FieldTypes {get; set;}

public HiddenFieldPanelViewModel()
{
HiddenFieldList = new List<HiddenFieldComponent>();
IsVisible = false;
}
}

这些将是您导入到 xaml 中的命名空间:

xmlns:local="clr-namespace:NamespaceToYourEnum" 
xmlns:System="clr-namespace:System;assembly=mscorlib"

然后您可以设置一个 ObjectDataProvider 来绑定(bind) Combobox。一些示例 XAML:

<Window.Resources>    
<ObjectDataProvider x:Key="EnumDataProvider"
MethodName="GetValues"
ObjectType="{x:Type System:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="local:FieldTypes"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>

<!-- FieldTypesEnumProperty would be in your ViewModel -->
<ComboBox Height="25"
SelectedItem="{Binding Path=FieldTypesEnumProperty}"
ItemsSource="{Binding Source={StaticResource EnumDataProvider}}" />

关于c# - 将枚举绑定(bind)到 DataGrid ComboBox View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5437072/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com