Я использую 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
Пользовательский интерфейс Avalonia устанавливает DataContext элемента управления в шаблоне данных ContentControls ⇐ C#
Место общения программистов C#
1714254172
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;
}
}
[b]РЕДАКТИРОВАТЬ: ДОПОЛНИТЕЛЬНАЯ информация[/b]
Если я заменю ContentControl на ItemsControl и настройте переменную SelectedPage как строку[] только с одним объектом, это работает. Это просто нарушает стиль, поскольку элемент ItemsControl не может использовать * для высоты RowDefinition.
В чем разница в обработке DataTemplate между ContentControl и ItemsControl?
Это работает:
Подробнее здесь: [url]https://stackoverflow.com/questions/78392647/avalonia-ui-set-datacontext-of-control-in-contentcontrols-datatemplate[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия