wpf绑定到静态资源

时间:2013-05-21 13:25:00

标签: wpf binding staticresource

所以我在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]));
        }
    }

传递DataTable的代码:

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

我知道我很可能只需编辑资源部分,但我不确定应该怎么做呢?

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我看到了多个问题。

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

  2. 让我们说你修好No.1。何时调用“callMyClassificators”?绑定完成后,MyClasificators无法通知WPF列表已更改。你可以使用ObservableCollection&gt;以便WPF自动观察收集更改。