У меня есть заголовок привязки проблемы в HeaderTemplate. Когда я делаю в xaml следующее, этот текстовый блок либо не появляется, либо в нем не отображается текст, что делает его невидимым:
<TextBlock Text = "{Binding}" Foreground = "Red" HorizontalAlignment = "Left" />
При правильной работе он должен отображать текст заголовка: «Имя».
Ксамл
<TextBox x:Name = "NameTextBox" Header = "Name" PlaceholderText = "Enter Name" PlaceholderForeground = "Gray" IsColorFontEnabled = "True" Text = "{x:Bind ViewModel.Supplier.Name, Mode=TwoWay}">
<TextBox.HeaderTemplate >
<DataTemplate x:DataType = "models:Supplier">
<StackPanel Orientation = "Horizontal">
<TextBlock Text = "{Binding}" Foreground = "Red" HorizontalAlignment = "Left" />
<SymbolIcon Symbol = "ReportHacked" Foreground = "Red" Visibility = "{x:Bind HasErrors, Mode=OneWay}" HorizontalAlignment = "Right" Margin = "0 4">
<ToolTipService.ToolTip>
<TextBlock Text = "{x:Bind Errors, Mode=OneWay}" Foreground = "Red" />
</ToolTipService.ToolTip>
</SymbolIcon>
</StackPanel>
</DataTemplate>
</TextBox.HeaderTemplate>
</TextBox>
Посмотреть модель
public partial class SupplierViewModel: ObservableValidator
{
RecipeDBContext context;
private Supplier _supplier = new Supplier();
public Supplier Supplier => _supplier;
[ObservableProperty]
private ObservableCollection<Supplier> _suppliers;
}
Модель
public partial class Supplier: ObservableValidator
{
public int Id { get; set; }
[ObservableProperty]
[NotifyDataErrorInfo]
[Required(ErrorMessage = "Name is Required")]
[MinLength(2, ErrorMessage = "Name should be longer than one character")]
private string _name = string.Empty;
}
Вы можете использовать свойство ElementNameBinding
или установить DataContext контекста Header
.
См. https://learn.microsoft.com/en-us/answers/questions/1611265/how-to-bind-a-buttons-command-inside-a-data-templa для получения дополнительной информации и минимального NavigationView
образец.
Вы передаете string
«Имя» в качестве Header
. Если вы хотите иметь доступ к значению Supplier
, вам нужно передать его в Header
:
<TextBox
x:Name = "NameTextBox"
Header = "{x:Bind ViewModel.Supplier.Name, Mode=OneWay}"
Text = "{x:Bind ViewModel.Supplier.Name, Mode=TwoWay}"
...>
<TextBox.HeaderTemplate>
<DataTemplate x:DataType = "models:Supplier">
</DataTemplate>
</TextBox.HeaderTemplate>
</TextBox>
Это дало мне то, что мне нужно, но у меня есть другая проблема. Для этого я задам еще один вопрос. Спасибо еще раз.