На основе UserControl
сделал вот такой тестовый компонент:
<UserControl x:Class="HlsDumpLib.GuiTestWPF.UserControl1"
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"
mc:Ignorable="d"
d:DesignHeight="30" d:DesignWidth="80">
<Grid>
<TextBox Name="textBox" TextChanged="textBox_TextChanged" />
</Grid>
</UserControl>
using System.Windows;
using System.Windows.Controls;
namespace HlsDumpLib.GuiTestWPF
{
public partial class UserControl1 : UserControl
{
public string TextValue
{
get { return (string)GetValue(TextValueProperty); }
set { SetValue(TextValueProperty, value); }
}
public static readonly DependencyProperty TextValueProperty = DependencyProperty.Register(
name: "TextValue",
propertyType: typeof(string),
ownerType: typeof(UserControl1),
typeMetadata: new FrameworkPropertyMetadata(
defaultValue: string.Empty,
propertyChangedCallback: new PropertyChangedCallback((s, e) => (s as UserControl1)?.OnTextValueChanged()),
null),
validateValueCallback: new ValidateValueCallback(obj => true));
public UserControl1()
{
InitializeComponent();
}
protected void OnTextValueChanged()
{
textBox.Text = TextValue;
//как уведомить parent?
}
private void textBox_TextChanged(object sender, TextChangedEventArgs e)
{
TextValue = textBox.Text;
}
}
}
XAML главного окна:
<local:UserControl1 TextValue="{Binding Aaa}"/>
Вью-модель главного окна:
public string Aaa { get => _aaa; set => SetProperty(ref _aaa, value); }
private string _aaa;
Когда в TextBox
е этого компонента меняется текст, вью-модель об этом не знает и переменная _aaa
всегда остаётся пустой. Как создать и прокинуть уведомление?