如何动态地添加一个转换器的代码隐藏

我绑定一个DataGrid动态数据通过IDictionary的: http://www.scottlogic.co.uk/blog/colin/2009/04/binding-a-silverlight-datagrid-to-dynamic-data-via-idictionary/comment-page-1/#comment-8681

但我不希望在XAML中定义的列(下面是它是如何在科林·埃伯哈特的职位做

<data:DataGrid.Columns> <data:DataGridTextColumn Header="Forename" Binding="{Binding Converter={StaticResource RowIndexConverter}, ConverterParameter=Forename}" /> </data:DataGrid.Columns>

所以我写了下面的代码,试图做同样的事情在后面的代码,但是代码不会调用RowIndexConverter。 一定有什么缺失。

码:

// add columns DataGridTextColumn textColumn = new DataGridTextColumn(); textColumn.Header = "Forename"; Binding bind = new Binding("Forename"); bind.Converter = new RowIndexConverter() ; bind.ConverterParameter = "Forename"; textColumn.Binding = bind; _dataGrid.Columns.Add(textColumn);

其余的代码(这里的上下文)的:

// generate some dummy data Random rand = new Random(); for (int i = 0; i < 200; i++) { Row row = new Row(); row["Forename"] = s_names[rand.Next(s_names.Length)]; row["Surname"] = s_surnames[rand.Next(s_surnames.Length)]; row["Age"] = rand.Next(40) + 10; row["Shoesize"] = rand.Next(10) + 5; _rows.Add(row); } // bind to our DataGrid _dataGrid.ItemsSource = _rows; public class Row { private Dictionary<string, object> _data = new Dictionary<string, object>(); public object this[string index] { get { return _data[index]; } set { _data[index] = value; } } }

--------------解决方案-------------

在数据通过属性路径得到后转换器被调用。 由于在行没有“用的名字”属性,这是行不通的(你可以看到在输出窗口绑定除外)。

我解决了通过更改绑定定义为:

Binding bind = new Binding();
bind.Mode = BindingMode.OneWay;

因为你不能有双向不带路径(我有没有第二行的除外)的结合。 由于没有属性路径是有道理的,在第二个想法,因为我们希望绑定到全行的对象,而不是它的一个属性。

注:与测试VS 2008 SP1,WPF项目。

分类:。净 时间:2015-03-16 人气:185
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.477 (s). 11 q(s)