【发布时间】:2011-03-29 00:11:39
【问题描述】:
我有一个涉及 (3) 个 DataGrids 的演示文稿,它们几乎相同,但又足够不同,以至于它看起来像是一个更简洁的设计,可以在代码中完成整个事情。
它仍然是原始的(下面的类图),但可以按照我想要的方式工作,除了一件事! Visual Studio 设计者无法弄清楚 DataContext 的后期绑定,所以会抛出错误。
下面是我如何提取网格的数据上下文以用于给定列的示例,以及我得到的错误。
- 有没有人想办法让设计人员对现有代码感到满意?
- 有人对更好的方法有建议吗?
我知道有一些方法可以给 Blend 一些数据概念,但我还不知道 Blend。
干杯,
浆果
代码
public abstract class TimesheetGridColumn : DataGridTextColumn
{
...
protected ActivityCollectionViewModel _GetDataContext() { return (ActivityCollectionViewModel) DataGridOwner.DataContext; }
public virtual void SetHeader() {
var tb = new TextBlock
{
Text = _GetHeaderText(),
ToolTip = _GetHeaderToolTip(),
};
Header = tb;
}
....
}
public class ActivityDescriptionColumn : TimesheetGridColumn
{
...
*** WORKS at RUNTIME but DESIGNER does not know that *******
protected override string _GetHeaderText() {
return _GetDataContext().PresentationSubject;
}
}
XAML 片段和设计器错误
<Expander Header="{Binding DisplayName}" BorderThickness="1" IsExpanded="True">
<dataGrid:ActivityDataGrid /> <=============== simple but error
</Expander>
System.NullReferenceException
Object reference not set to an instance of an object.
at ...ColumnSubclasses.ActivityDescriptionColumn._GetHeaderText() in ActivityDescriptionColumn.cs:line 24
类图
【问题讨论】:
标签: wpf silverlight datagrid designer