gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:23:01 25 4
gpt4 key购买 nike

我通过 IDictionary 将 Datagrid 绑定(bind)到动态数据:http://www.scottlogic.co.uk/blog/colin/2009/04/binding-a-silverlight-datagrid-to-dynamic-data-via-idictionary/comment-page-1/#comment-8681

但我不想在 xaml 中定义任何列(下面是 Colin Eberhardt 的帖子中的做法

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

最佳答案

通过属性路径获取数据后调用转换器。由于 Row 中没有“Forename”属性,因此它不起作用(您可以在“输出”窗口中看到“绑定(bind)”异常)。

我通过将 Binding 定义更改为解决了这个问题:

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

因为没有路径就不能进行双向绑定(bind)(我在没有第二行的情况下得到的异常(exception))。再想一想,没有属性路径是有意义的,因为我们想要绑定(bind)到完整的 Row 对象,而不是它的属性之一。

注意:使用 VS 2008 SP1、WPF 项目进行测试。

关于.net - 如何在代码隐藏中动态添加转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2314165/

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