Не могу получить доступ к свойствам пользовательского элемента управления
Имеется пользовательский элемент управления UCTextboxName.
<UserControl x:Class="DocConstructor.UserControls.UCTextboxName"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:DocConstructor.UserControls"
mc:Ignorable="d">
<DockPanel Margin="5">
<Label Content=""/>
<TextBox MinWidth="200" Text=""/>
</DockPanel>
</UserControl>
Как я могу получить доступ к свойству Content ярлыка и к свойству Text текстбокса при использовании UCTextboxName при использовании моего элемента управления в других представлениях?
Я руководствуюсь этим уроком, но он работает лишь потому, что DataContext окна указано само окно, я же использую стороннюю модель представления в соответствии с MVVM.
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Например через свойство зависимости DependencyProperty.
<UserControl x:Class="DocConstructor.UserControls.UCTextboxName"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:DocConstructor.UserControls"
mc:Ignorable="d">
<DockPanel Margin="5" >
<TextBlock Text="{Binding LabelText, RelativeSource={RelativeSource AncestorType=local:UCTextboxName}}" DockPanel.Dock="Top"/>
<TextBox MinWidth="200" Text="{Binding Text, RelativeSource={RelativeSource AncestorType=local:UCTextboxName}}"/>
</DockPanel>
</UserControl>
public partial class UCTextboxName : UserControl
{
public static readonly DependencyProperty LabelTextProperty =
DependencyProperty.Register("LabelText", typeof(string), typeof(UCTextboxName), new PropertyMetadata(string.Empty));
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(UCTextboxName), new FrameworkPropertyMetadata(string.Empty, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public string LabelText
{
get => (string)GetValue(LabelTextProperty);
set => SetValue(LabelTextProperty, value);
}
public string Text
{
get => (string)GetValue(TextProperty);
set => SetValue(TextProperty, value);
}
public UCTextboxName()
{
InitializeComponent();
}
}
Проверка
<local:UCTextboxName LabelText="some text" Text="Hello World"/>
