.net 如何在代码隐藏中动态添加转换器

.net 如何在代码隐藏中动态添加转换器,.net,wpf,silverlight,code-behind,converter,.net,Wpf,Silverlight,Code Behind,Converter,我正在通过IDictionary将Datagrid绑定到动态数据: 但是我不想在xaml中定义任何列(下面是Colin Eberhardt的文章中如何定义的) <data:DataGrid.Columns> <data:DataGridTextColumn Header="Forename" Binding="{Binding Converter={StaticResource RowIndexConverter}, ConverterParameter=Forenam

我正在通过IDictionary将Datagrid绑定到动态数据:

但是我不想在xaml中定义任何列(下面是Colin Eberhardt的文章中如何定义的)

<data:DataGrid.Columns>
    <data:DataGridTextColumn Header="Forename" Binding="{Binding Converter={StaticResource RowIndexConverter}, ConverterParameter=Forename}" />
</data:DataGrid.Columns>
代码的其余部分(此处用于上下文):

//生成一些虚拟数据
Random rand=新的Random();
对于(int i=0;i<200;i++)
{
行=新行();
行[“名字”]=s_名称[rand.Next(s_名称.Length)];
行[“姓氏”]=s_姓氏[rand.Next(s_姓氏长度)];
行[“年龄”]=下一个(40)+10兰特;
行[“Shoesize”]=兰特下一步(10)+5;
_行。添加(行);
}
//绑定到我们的数据网格
_dataGrid.ItemsSource=\u行;
公共类行
{
专用字典_data=新字典();
公共对象[字符串索引]
{
得到
{
返回数据[索引];
}
设置
{
_数据[索引]=值;
}
}
}

在通过属性路径获取数据后,将调用转换器。因为第行中没有“Forename”属性,所以它无法工作(您可以在输出窗口中看到绑定异常)

我将绑定定义更改为:

    Binding bind = new Binding();
    bind.Mode = BindingMode.OneWay;
因为没有路径就不能进行双向绑定(我在没有第二行的情况下得到的异常)。 再想一想,没有属性路径是有意义的,因为我们想要绑定到整行对象,而不是它的一个属性

注意:使用VS2008SP1、WPF项目进行测试

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