ContentPresenter вызывает ContentTemplateSelector с нулевым элементом при привязке к даннымC#

Место общения программистов C#
Ответить
Anonymous
 ContentPresenter вызывает ContentTemplateSelector с нулевым элементом при привязке к данным

Сообщение Anonymous »

В моем приложении WinUI 3 (с использованием WindowsAppSDK 1.8.251106002) я пытаюсь использовать привязанный к данным ContentPresenter для отображения данных из моих моделей представления различными способами в зависимости от их типа данных. Для этой цели я хочу использовать собственный ContentTemplateSelector, как описано в этой статье Microsoft. К сожалению, это не работает, поскольку функция SelectTemplateCore всегда получает значение null для параметра item.
Я делаю что-то не так? Вот упрощенная версия того, что я пытался:
Сгенерированный вывод:
Изображение

MainWindow.xaml:



















MainWindow.xaml.cs:
using Microsoft.UI.Xaml;
using System.ComponentModel;

namespace WinUIApp1
{
public partial class MyViewModel : INotifyPropertyChanged
{
private string _text = "This is a test";

public string Text
{
get => _text;
set {
if (_text != value)
{
_text = value;
OnPropertyChanged(nameof(Text));
}
}
}

protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

public event PropertyChangedEventHandler? PropertyChanged;
}

public sealed partial class MainWindow : Window
{
readonly MyViewModel _viewModel = new();

public MainWindow()
{
InitializeComponent();
}
}
}

MyDataTemplateSelector.cs:
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;

namespace WinUIApp1;

public partial class MyDataTemplateSelector : DataTemplateSelector
{
protected override DataTemplate SelectTemplateCore(object item)
{
if (item is string)
{
return (DataTemplate)Application.Current.Resources["MyDataTemplate"];
}
return base.SelectTemplateCore(item);
}

protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
if (item is string)
{
return (DataTemplate)Application.Current.Resources["MyDataTemplate"];
}
return base.SelectTemplateCore(item, container);
}
}

App.xaml:


















Подробнее здесь: https://stackoverflow.com/questions/798 ... data-bound
Ответить

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

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

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

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

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