动态网格列和对StaticResources的访问

时间:2011-08-10 10:32:57

标签: c# silverlight dynamic datagrid

在我的网格中,我有一个静态列,当我点击一个按钮时,我会添加一些动态列:

class ItemConstraintColumn : DataGridTemplateColumn
        {
            public ItemConstraintColumn(ReportEventItemConstraint _ic)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("<DataTemplate ");
                sb.Append("xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' ");
                sb.Append("xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' ");
                sb.Append("xmlns:local='clr-namespace:MyNameSpace;assembly=MyAssembly'> ");
                sb.Append("<local:SignalControl DataContext=\"{Binding Source={StaticResource SignalControlVM}}\" />");
                sb.Append("</DataTemplate>");

                CellTemplate = (DataTemplate)XamlReader.Load(sb.ToString());
                Header = _ic.Name;
            }
        }

问题是我无法访问我的Xaml页面中声明的StaticResource,所以我无法绑定我的控件... 你能告诉我这有什么问题吗? 感谢

2 个答案:

答案 0 :(得分:1)

在后面的代码中,您可以使用以下代码查找在xaml中声明的静态资源

  

this.FindResource( “资源名称”))

答案 1 :(得分:0)

看起来您正在将DataContext创建为完全独立的Xaml文件。

在加载时评估绑定,此时您的代码段不是可视树的一部分,因此找不到任何内容(在解析时没有父页面,因此也没有资源)。

最好不要像现在一样加载它,在其中找到local:SignalControl元素,然后使用代码绑定DataContext。

虽然Shebin本身没用,但Shebin关于定位资源的建议将完成工作的最后一部分。即找到要绑定的资源。