我知道有第三方Silverlight属性网格(实际上我的公司拥有一个)所以请不要建议第三方控件:我想了解更多关于xaml中绑定的问题。
我正在编写一个Silverlight前端作为标志外观来启动SSRS和基于php的报告。
我创建了一个包含报告信息的Report类,它有一个参数集合,其中包含有关运行报告时需要填写的参数的信息。
我的计划是创建一个绑定到Report的Parameters集合的silverlight属性网格。
这是一个更简单的类版本:
public class Report
{
public int ReportId { get; set; }
public string ReportName { get; set; }
public string Description { get; set; }
private List<ReportParameter> _Parameters = new List<ReportParameter>();
public List<ReportParameter> Parameters
{
get { return _Parameters; }
set { _Parameters = value; }
}
}
public class ReportParameter
{
public int ReportId { get; set; }
public string ParameterName { get; set; }
public string DataTemplateName { get; set; }
public bool IsRequired { get; set; }
}
我希望使用DataTemplateName
的{{1}}属性绑定到数据模板:例如,如果我有一个日期参数,我希望能够设置{{1} }然后ReportParameter
并让该行使用参考资料中定义的DataTemplateName="MyDatePicker"
来编辑参数值。
这是我用来尝试让它工作的一些XAML:
DataTemplate={StaticResource {Binding DataTemplateName}}
谢谢!
答案 0 :(得分:1)
我明白了 - 借助Silverlight论坛上的精彩常见问题解答:
http://forums.silverlight.net/p/95440/218611.aspx
Silverlight没有WPF所做的DataTemplateSelector类,这可以解决问题。
标题为
的部分7.1 Silverlight尚不支持WPF的哪些数据绑定功能?有解决方法吗?
对于DataTemplateSelector功能,有一个简单的解决方法。
所以这就是我在代码示例中修复它的方法:
使用以下内容替换列表框:
<ListBox ItemsSource="{Binding Parameters}">
<ListBox.ItemTemplate>
<DataTemplate>
<ContentControl Content="{Binding}" Loaded="ContentControl_Loaded"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
然后在后面的代码中填写ContentControl_Loaded事件:
private void ContentControl_Loaded(object sender, RoutedEventArgs e)
{
ContentControl cc = (ContentControl) sender;
XReportParameter p = (XReportParameter)cc.DataContext;
cc.ContentTemplate = (DataTemplate)this.Resources[p.DataTemplateName];
}
效果很好!