У меня есть презентация, включающая (3) DataGrids, которые почти одинаковы, но достаточно различны, что кажется более чистым дизайном, позволяющим выполнять все в коде.
Он все еще сырой (диаграмма классов ниже), но работает так, как я хочу, за исключением одной вещи! Дизайнер Visual Studio не может определить позднюю привязку DataContext, поэтому он выдает ошибку.
Ниже приведен пример того, как я извлекаю контекст данных сетки для использования в данном столбце, а также полученную ошибку.
- Кто-нибудь видит способ порадовать дизайнера существующим кодом?
- У кого-нибудь есть предложения по лучшему подходу?
Я знаю, что есть способы дать Blend некоторое представление о данных, но я пока не знаю Blend.
Приветствия
Berryl
код
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 SNIPPET & ОШИБКА КОНСТРУКТОРА
<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
ДИАГРАММА КЛАССА