【问题标题】:wpf DataContext error in Designer设计器中的 wpf DataContext 错误
【发布时间】:2011-03-29 00:11:39
【问题描述】:

我有一个涉及 (3) 个 DataGrids 的演示文稿,它们几乎相同,但又足够不同,以至于它看起来像是一个更简洁的设计,可以在代码中完成整个事情。

它仍然是原始的(下面的类图),但可以按照我想要的方式工作,除了一件事! Visual Studio 设计者无法弄清楚 DataContext 的后期绑定,所以会抛出错误。

下面是我如何提取网格的数据上下文以用于给定列的示例,以及我得到的错误。

  1. 有没有人想办法让设计人员对现有代码感到满意?
  2. 有人对更好的方法有建议吗?

我知道有一些方法可以给 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


    【解决方案1】:

    如果您只需要让设计师再次工作,您可以在某处输入DesignerProperties.GetIsInDesignModecheck。

    怎么样:

    protected override string _GetHeaderText()  
        {  
            if (!DesignerProperties.GetIsInDesignMode(this))  
            {  
                return _GetDataContext().PresentationSubject;  
            }  
            else  
            {  
                return "Design Mode Text";  
            }  
        }
    

    【讨论】:

      【解决方案2】:

      您可以使用 WPF 中的设计器属性解决您的设计器问题。关注this link to an MSDN article on Design-time attributes,具体看一下d:DataContext属性。如果您可以创建网格绑定到的类的示例实现,则可以让设计器再次为您工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-06
        • 2014-07-06
        • 2011-05-07
        • 2016-04-01
        • 1970-01-01
        相关资源
        最近更新 更多