【问题标题】:Silverlight datagrid runtime adding and bindingSilverlight 数据网格运行时添加和绑定
【发布时间】:2012-12-12 14:58:57
【问题描述】:

我需要在运行时将列添加到 silverlight 列,并执行列的绑定。

这就是我在 xaml 中静态处理的方式

<sdk:DataGridTextColumn  CanUserReorder="True" CanUserResize="True" CanUserSort="True"  Header="CriteriaName" Width="2*" Binding="{Binding Path=[CriteriaName]}" IsReadOnly="True"  />

现在我想在后面的代码中做同样的事情,

这就是我所做的

 foreach(string Col in lColumnNames)
            {
                DataGridTextColumn DGCol=new DataGridTextColumn();
                DGCol.Header= Col;


                Binding lObjBinding = new Binding(Col);
                lObjBinding.Mode = BindingMode.OneWay;

                DGCol.Binding = lObjBinding;
                GrdQuickFindResult.Columns.Add(DGCol);


            }

这不起作用。我只能看到 DataGrid 中的空白行,就好像绑定没有发生一样。请检查并告诉我我使用 xaml 完成的所有事情是否也使用 C# 完成,或者是否有一些属性需要在我创建的绑定对象中设置。 谢谢

【问题讨论】:

  • 您确定您的“Col”列名称与您要绑定的属性名称匹配吗?
  • 是的,我确定,,,,标题名称和属性名称相同,
  • 您能告诉我如何使用 c# Binding="{Binding Path=[CriteriaName]}" 编写以下 xaml 代码我如何设置 Path 属性。仅绑定 lObjBinding = new Binding (Col) 没有帮助我尝试从 xaml 中删除 path 关键字,我看到的只是空行,因为我在使用后面的代码绑定时看到。所以我觉得这是因为我没有正确地包含这个 Binding="{Binding Path=[CriteriaName]}" 使用 c#。 @亚瑟

标签: silverlight binding


【解决方案1】:

类似的绑定:

"{Binding Path=MyProperty}" 

只是一种冗长的写法:

"{Binding MyProperty}"

同理

Binding b = new Binding();

相同
Binding b = new Binding("MyProperty");

这意味着您将 TextBoxColumn 的文本绑定到数据对象中属性“MyProperty”的值,该数据对象将被设置为 DataGrid 中一行的 DataContext。为此,我们假设您的数据对象类似于:

public class DataObject{
    public object MyProperty {get; set;}
}

如果您的数据对象是这样的,那么您在代码中的绑定很好,它们应该可以工作。

当您指定如下绑定时:

"{Binding Path=[MyProperty]}" 

或者

"{Binding [MyProperty]}"

您正在绑定数据对象的indexer(如果它实现了一个)并访问与索引“MyProperty”对应的值。如果您这样做,我假设您的数据对象是 IDictionary 或实现索引器的类,例如:

public class DataObject{
    public object this[object index]
    {
        get{ /*return something*/ }
        set { /*set something*/ }
    }
}

只是一个建议:将camel case 用于您的局部变量,对于查看您的代码的其他人来说看起来很奇怪,似乎它们是实例属性或静态字段。

【讨论】:

    【解决方案2】:
     foreach(string Col in lColumnNames)
                {
                    DataGridTextColumn DGCol=new DataGridTextColumn();
                    DGCol.Header= Col;
    
                    Binding lObjBinding = new Binding();
                    lObjBinding.Mode = BindingMode.OneWay;
    
                    //=====This is what was missing======================//
                    lObjBinding.Path = new PropertyPath("["+Col+"]");
                    //==================================================//
    
                    DGCol.Binding = lObjBinding;
                    GrdQuickFindResult.Columns.Add(DGCol);
    
    
                }
    

    【讨论】:

      猜你喜欢
      • 2012-01-20
      • 2011-10-29
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多