Привязка свойств пользовательского элемента управления WinUI 3 не работаетC#

Место общения программистов C#
Ответить
Anonymous
 Привязка свойств пользовательского элемента управления WinUI 3 не работает

Сообщение Anonymous »

Я создал пользовательский элемент управления, который предполагается использовать в качестве кнопки в представлении элемента, однако привязка для изменения его текста не работает.
CustomControls (проект библиотеки классов Winui3) )/CustomTableItem.cs
namespace CustomControls
{
public sealed class CustomTableItem : Control
{

DependencyProperty TableNameProperty = DependencyProperty.Register(
nameof(TableName),
typeof(string),
typeof(CustomTableItem),
new PropertyMetadata(null));

public string TableName
{
get => (string)GetValue(TableNameProperty);
set => SetValue(TableNameProperty, value);
}

public CustomTableItem()
{
this.DefaultStyleKey = typeof(CustomTableItem);
}

public CustomTableItem(string TableName)
{
this.DefaultStyleKey = typeof(CustomTableItem);
this.TableName = TableName;
}
}
}

CustomControls/Themes/Generic.xaml
//one other style above [...]















View(упакованный проект winui3)/CustomTablePage.xaml

x:Class="View.CustomTablePage"
xmlns="http://schemas.microsoft.com/winfx/2006 ... esentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:View"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:customControls ="using:CustomControls"
xmlns:mc="http://schemas.openxmlformats.org/marku ... ility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">



CustomTablePage отображается с помощью функции ContentFrame.Navigate()
Конечный результат:
Изображение

Когда я размещаю точно такой же элемент управления на странице, экземпляр которой создается один раз и используется повторно(ContentFrame.Content = PageObject) Свойство работает:
Изображение

Расположение другой страницы: View/PageName.xaml.
Код:

Я пробовал изменить привязку в текстовом свойстве шаблона, но это все равно не сработало. Я видел некоторые ответы, в которых говорилось о чем-то под названием DataContex, но я не понимал, как это работает, и заметил, что большинство из них использовали пользовательские элементы управления вместо пользовательских элементов управления или WPF.
Изменить:
После отладки привязки (после ответа @Andrew KeepCoding) и добавления TargetNullValue в строку привязки
Text="{Binding TableName, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay, FallbackValue='Error Binding', TargetNullValue='Source is null!'}"

Я сузил проблему до нулевого значения источника.
Изменить 2:После более подробного рассмотрения моего кода конструктора CustomTablePage:
namespace View
{
///
/// An empty page that can be used on its own or navigated to within a Frame.
///
public sealed partial class CustomTablePage : Page
{
public CustomTablePage()
{

this.InitializeComponent();
var item = new CustomTableItem();
item.TableName = "Test";

/*itemsViewTables.ItemsSource = new ObservableCollection
{
item

};*/
}
}
}

И комментируем строки:
var item = new CustomTableItem();
item.TableName = "Test";

Текст кнопки начал отображаться, но если я добавлю более одной кнопки, будет отображаться только последний текст, все остальные будут иметь значение NULL. Похоже, что на странице может быть только один элемент управления этого типа, независимо от того, отображаются остальные или нет.
Добавлено в CustomTablePage.xaml:









Что происходит сейчас:
[img]https://i .sstatic.net/1WfBK83L.png[/img]

Проблема решена путем добавления public static readonly в объявление свойства зависимостей:
public static readonly DependencyProperty TableNameProperty = DependencyProperty.Register(
nameof(TableName),
typeof(string),
typeof(CustomTableItem),
new PropertyMetadata(null));


Подробнее здесь: https://stackoverflow.com/questions/790 ... oesnt-work
Ответить

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

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

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

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

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