Пользовательский интерфейс Avalonia устанавливает DataContext элемента управления в шаблоне данных ContentControlsC#

Место общения программистов C#
Ответить
Anonymous
 Пользовательский интерфейс Avalonia устанавливает DataContext элемента управления в шаблоне данных ContentControls

Сообщение Anonymous »

Я использую ContentControl с DataTemplates, где селектор шаблона (на основе IDataTemplate) выбирает, какой DataTemplate применить.
Мой селектор шаблона выбирает правильный шаблон, а также показывает его. Моя проблема в том, что DataContext не наследуется от элемента управления из DataTemplate. Если я помещу элемент управления из DataTemplate вместо ContentControl, он будет работать, и DataContext будет унаследован.
Как передать DataContext пользовательского элемента управления > к элементам управления внутри DataTemplate ContentControl?
Код XAML выглядит следующим образом:














А это селектор шаблонов:
public class MainViewTemplateSelector : IDataTemplate
{
// This Dictionary should store our shapes. We mark this as [Content], so we can directly add elements to it later.
[Content]
public Dictionary AvailableViews { get; } = new Dictionary();

// The Keys of the DataTemplates for the views.
private List _ValidViews = new List { "DisruptionsView" }; // Here are more in reality

// Build the DataTemplate here
public Control Build(object? param)
{
var key = param?.ToString(); // Our Keys in the dictionary are strings, so we call .ToString() to get the key to look up
if (key is null) // If the key is null, we throw an ArgumentNullException
{
throw new ArgumentNullException(nameof(param));
}
return AvailableViews[key].Build(param);// finally we look up the provided key and let the System build the DataTemplate for us
}

// Check if we can accept the provided data
public bool Match(object? data)
{
if (data?.GetType() == typeof(string))
{
if (_ValidViews.Contains((string)data))
return true;

return false;
}
else
return false;
}
}

РЕДАКТИРОВАТЬ: ДОПОЛНИТЕЛЬНАЯ информация
Если я заменю ContentControl на ItemsControl и настройте переменную SelectedPage как строку[] только с одним объектом, это работает. Это просто нарушает стиль, поскольку элемент ItemsControl не может использовать * для высоты RowDefinition.
В чем разница в обработке DataTemplate между ContentControl и ItemsControl?
Это работает:














Подробнее здесь: https://stackoverflow.com/questions/783 ... tatemplate
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»