1

所以我在 WPF 中绑定有问题。我正在尝试将 DataGrid ComboBoxColumn 与静态资源绑定,但没有运气。我知道问题出在哪里,但我不确定如何解决。

在 XAML 我有这个:

<local:MyClasificators x:Key="clList"></local:MyClasificators>

和 DataGridComboBoxColumn

<DataTemplate>
    <ComboBox ItemsSource="{StaticResource clList}" DisplayMemberPath="Value"  ></ComboBox>
</DataTemplate>

我绑定的源代码:

public class MyClasificators:List<KeyValuePair<object, object>>
{
    public void _MyClasificators(DataTable country)
    {
        foreach (DataRow row in country.Rows)
        {
            this.Add(new KeyValuePair<object, object>(row.ItemArray[0], row.ItemArray[1]));
        }
    }

以及传递数据表的代码:

public void callMyClassificators(DataTable country)
{
    MyClasificators clasif = new MyClasificators();
    clasif._MyClasificators(country);
}

我知道很可能我只需要编辑资源部分,但我不确定我应该如何去做?

4

3 回答 3

1
<local:MyClasificators x:Key="clList"></local:MyClasificators>

翻译成类似的东西:

Resources.Add("clList", new MyClasificators());

就是这样,您的对象中没有数据。

您可以从代码创建资源clList,例如在 app.xaml.cs 中:

var countryTable = ... // Get or create table here
var clList = new MyClasificators();
var clList.callMyClassificators(countryTable);
Resources.Add("clList", clList);
于 2013-05-21T13:52:41.720 回答
0

从上面的代码中,似乎在资源部分创建了一个 MyClasificators 的实例。但是 MyClasificators (clList) 没有任何项目。这是一个空列表。在您的代码中放置一个断点并检查 this.Resources["clList"] 并检查其中的项目数。

于 2013-05-21T13:36:04.060 回答
0

我看到了多个问题。

  1. 在 callMyClassificators 中,您创建了一个新的 MyClasificators 实例。该实例不是您在 Xaml 中绑定的实例。当您定义一个本地资源时,会在那里创建一个实例。那是您的 Combox 绑定的那个,而不是您在 callMyClassificators 中创建的那个。您应该确保 xaml 和代码在同一个实例上工作。

  2. 假设您修复了 No.1。何时调用“callMyClassificators”?绑定完成后,您的 MyClasificators 无法通知 WPF 列表已更改。您可以使用 ObservableCollection> 以便 WPF 自动观察集合更改。

于 2013-05-21T13:47:23.100 回答