- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的枚举:
enum Foo
{
[Description("the quick")]
Bar,
[Description("brown fox")]
Baz,
[Description("jumped over")]
Qux
}
class MainWindowViewModel : ViewModelBase
{
public ObservableCollection<RowViewModel> Rows { get { ... } }
}
class RowViewModel : ViewModelBase
{
public String Name { get { ... } set { ... } }
public Foo Foo { get { ... } set { ... } }
}
<DataGrid AutoGeneratingColumn="OnAutoGeneratingColumn" ItemsSource="{Binding Path=Rows}" />
MainWindowViewModel.Rows[n].Foo
是一个枚举,WPF 会自动生成一个
DataGridComboBoxColumn
枚举成员作为组合框下拉值,到目前为止一切顺利。
[Description("")]
组合框下拉列表中的值并显示。所以我实现了
IValueConverter
.然后我为
OnAutoGeneratingColumn
添加了一个处理程序:
private void OnAutoGeneratingColumn(Object sender, DataGridAutoGeneratingColumnEventArgs e)
{
DataGridComboBoxColumn dgCol = e.Column as DataGridComboBoxColumn;
if( dgCol != null && e.PropertyType.IsEnum ) {
Binding binding = new Binding( e.PropertyName );
binding.Converter = EnumDescriptionValueConverter.Instance;
dgCol.TextBinding = binding;
dgCol.SelectedItemBinding = binding;
}
}
最佳答案
您正在努力做到这一点,因为枚举不是可更改的项目,因此在 VM 构造期间枚举枚举并将描述提取到列表中,然后将控件绑定(bind)到该列表。
例子
拿我们的枚举
public enum TheNums
{
[Description("One")]
Alpha,
[Description("Two")]
Beta,
[Description("Three")]
Gamma
}
public static class AttributeExtension
{
/// <summary>If an attribute on an enumeration exists, this will return that
/// information</summary>
/// <param name="value">The object which has the attribute.</param>
/// <returns>The description string of the attribute or string.empty</returns>
public static string GetAttributeDescription(this object value)
{
string retVal = string.Empty;
try
{
retVal = value.GetType()
.GetField(value.ToString())
.GetCustomAttributes(typeof(DescriptionAttribute), false)
.OfType<DescriptionAttribute>()
.First()
.Description;
}
catch (NullReferenceException)
{
//Occurs when we attempt to get description of an enum value that does not exist
}
finally
{
if (string.IsNullOrEmpty(retVal))
retVal = "Unknown";
}
return retVal;
}
}
List<string> EnumDescriptions { get; set; }
:
EnumDescriptions = new List<string>()
{
TheNums.Alpha.GetAttributeDescription(),
TheNums.Beta.GetAttributeDescription(),
TheNums.Gamma.GetAttributeDescription()
};
EnumDescriptions
的列表。
public List<string> EnumDescriptions { get; set; }
public MainWindow()
{
InitializeComponent();
EnumDescriptions = new List<string>()
{
TheNums.Alpha.GetAttributeDescription(),
TheNums.Beta.GetAttributeDescription(),
TheNums.Gamma.GetAttributeDescription()
};
DataContext = EnumDescriptions;
}
EnumDescriptions
。
<ListBox ItemsSource="{Binding}" Width="100" Height="200"/>
path
),因此使用
Binding EnumDescriptions
或
Binding Path=EnumDescriptions
。
关于wpf - 带有 AutoGenerateColumns 的 WPF DataGrid 中枚举值的描述属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30147076/
关于VB.NET中GridView排序的问题: 我有一个带有 AutoGenerateColumns = True 的 GridView 我已经声明了排序事件
我是 MVVM 新手。我在我的项目中使用 wpf 和 MVVM。所以我现在正在测试一些东西,然后再深入研究我需要编写的应用程序。 我的页面(EmpDetailsWindow.xaml)是这样的
我有一个在 winforms 中使用 AutoGenerateColumns 的数据 GridView 。有一个日期列,然后是包含数值的 1-16 个数据列。我希望将所有这些 1-16 数据列格式化为
我有一个很大的 ObservableCollection,其中包含 40 多个不同类型的列。一些列是列表。我不想设置 AutoGenerateColumns=false 因为列的 amont 但数据网
我正在使用 AutoGenerateColumns="True"的 DataGrid。现在,除了自动生成的列之外,我还想添加一个我的“自定义”列,即所谓的“服务”列。 (在其中我想有几个超链接“开始”
我的 GridView : 在后面的代码中: protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e
我目前正在仔细研究 Laurent 的优秀工具包,我有以下问题。 从 Blend 4 开始,我为 Loaded 事件添加了一个 EventTrigger,在我的 ViewModel 中我有以下内容:
我刚刚制定了一个将属性 (DP) 绑定(bind)到 Datagrid 的解决方案。没关系,一切都光滑柔软。但是当我运行该应用程序时,DataGrid 只显示空白行!(假设有 10 条记录,我看到 1
我有一个配置为根据我的类(使用数据绑定(bind))自动生成列的 datagridview。 它适用于我所有类型为 string 的属性。但是,我有一个枚举类型的属性,使用类型转换器将其转换为图像。
我使用的是 GridView ,我需要每当任何列包含的文本长度超过其宽度时,它应该将文本换行或者应该在新行中显示文本的另一部分。下面是 GridView 代码:
这是我的枚举: enum Foo { [Description("the quick")] Bar, [Description("brown fox")] Baz,
我在 ASP.NET 2.0 中有一个 GridView,其中 AutoGenerateColumns 设置为 true。它将在运行时绑定(bind)到具有多种可能模式之一的 DataSet,而且我不
刚才我遇到了这个奇怪的问题,我想知道是否有我在 VS2012 中遗漏的东西来解决它。我正在使用 MDI Windows 窗体,我有这个 dataGridView,我从数据库中检索数据,然后使用数据库中
我有一个数据表,其中包含在运行时动态生成的列。此 DataTable 绑定(bind)到 AutoGenerateColumns 设置为 true 的 GridView。我遇到了一个问题,因为 Dat
我有一个简单的数据结构类: public class Client { public String name {set; get;} public String claim_numbe
当我将属性 AutoGenerateColumns 设置为 AutoGenerateColumns="true"时,我在设置 gridview 的宽度时遇到了问题。并且 gridview 在代码后面是
如果 AutoGenerateColumns = true,似乎无法操作 Gridview 的列。这是我的场景: 我有一个通用的 GridView,它根据用户的选择显示各种不同 LINQ 查询的结果。
我有一个使用 AutoGenerateColumns=True 绑定(bind)到 DataTable 的 WPF 4.0 DataGrid。这些列是动态的,但是我知道总会有一个名为 ID 的列,我想
我正在为一系列问题而苦苦挣扎。 我有一个动态数据集,我手动将其组装到 DataTable 中。 我必须自动生成列,因为数据不是静态的。 我需要将组合框的 ItemsSource 绑定(bind)到每个
如果我使用OnAutoGenerateColumn取消一些我不一定要生成的列,是否会影响Table.Columns.Count中的列数? 上下文 我正在逐行迭代表,获取每个值并将其传递给插入 SQL
我是一名优秀的程序员,十分优秀!