В законченном учебном приложении Todo Avalonia --- где и как TodoListView и AddItemView получают свои DataContexts равными TodoListViewModel и AddItemViewModel соответственно ???
Я имею в виду их родительский элемент управления MainConindow, DataContext является экземпляром MainWindowViewModel (как назначается в файле App.xaml.cs) --- в то время как атрибут Content в MainWindow связан со свойством Content MainWindowViewModel (которое получает назначенные экземпляры моделей представления во время выполнения). Я просто не могу отследить источник, из которого TodoListView и AddItemView получают свои DataContexts. Они получают это, пока:
- Создается ViewLocator во время выполнения? - но это невозможно, поскольку свойство DataContext вновь созданного экземпляра View по-прежнему равно NULL непосредственно перед тем, как ViewLocator возвращает экземпляр View - как показано в результате вывода следующего кода в завершенном приложении (код в блоке if изменяется мне произвести требуемый вывод):
public IControl Build(object data)
{
var name = data.GetType().FullName.Replace("ViewModel", "View");
var type = Type.GetType(name);
if (type != null)
{
var viewInstance = (Control)Activator.CreateInstance(type);
// the following always evaluates to true --- i.e. DataContext is always NULL before viewInstance is returned.
if(viewInstance.DataContext == null)
Console.WriteLine($"DataContext property of the newly created View instance of {name} in ViewLocator is NULL just before returning! ");
return viewInstance ;
}
else
{
return new TextBlock { Text = "Not Found: " + name };
}
}
ИЛИ они получают свой DataContext, назначенный родительским окном? --- но собственный DataContext родительского окна - MainWindowViewModel ----- как мы можем добраться до TodoListViewModel или AddItemViewModel из MainWindowViewModel ???
Короче говоря, мне неясно, где представления, сгенерированные во время выполнения через ViewLocator, получают присвоенные им свойства DataContext.