изменение текста в родительском UserControl из дочернего UserControl WPF - PullRequest
0 голосов
/ 16 октября 2018

Если ParentUserControl содержит TextBlock.ParentUserControl также содержит ChildUserControl с TextBox.Я хочу установить значение TextBlock из ParentUserControl из ChildTextBox.как я могу?
Другими словами, каким-то образом получить доступ к ParentUserControl и его элементу TextBlock, а затем изменить его значение из ChildUserControl!

Обновление
У меня есть окно xaml, которое содержит ParentUserControl, которое имеет TextBlock.Теперь я загружаю или добавляю еще один ChildUserControl во время выполнения.Этот недавно добавленный ChildUserControl содержит ChildTextBox.Теперь я хочу, чтобы при вводе некоторого значения в ChildTexBox ParentUserControl TextBlock получало это значение и обновлялось само.

1 Ответ

0 голосов
/ 16 октября 2018

Предполагая, что мы не следуем никаким MVVM, и простой подход к этой проблеме:

  1. Создайте ChildUserControl с текстовым полем внутри, как показано ниже,

          <UserControl x:Class="SO52840402.ChildUserControl"
          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:SO52607887"
          mc:Ignorable="d" 
          d:DesignHeight="450" d:DesignWidth="800">
      <Grid>
       <TextBox x:Name="ChildTextBox" />
      </Grid>  </UserControl>
    
  2. Создайте ParentUserControl, который содержит экземпляр TextBlock и ChildUserControl, как показано ниже,

           <UserControl x:Class="SO52840402.ParentUserControl"
           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:SO52607887"
          mc:Ignorable="d" 
          d:DesignHeight="450" d:DesignWidth="800">
    <Grid>
      <Grid.RowDefinitions>
          <RowDefinition />
          <RowDefinition />
      </Grid.RowDefinitions>
    
      <TextBlock x:Name="ParentTextBlock" Text="Hallo World!"/>
    
      <local:ChildUserControl x:Name="ChildUserControl" Grid.Row="1" />
    
    </Grid>  </UserControl>
    
  3. Теперь создайте событие TextChanged для TextBox, которое находится под ChildUserControl из кодаза конструктором ParentUserControl после «InitializeComponent», как показано ниже,

    public ParentUserControl()
    {
        InitializeComponent();
        ChildUserControl.ChildTextBox.TextChanged += OnChildTextBox_TextChanged;
    }
    
    private void OnChildTextBox_TextChanged(object sender, EventArgs e)
    {
        ParentTextBlock.Text = (sender as TextBox).Text;
    }
    

Примечание: - Это не рекомендуемый подход.Для лучшего подхода следуйте шаблону MVVM, поймите ваши требования и сделайте дизайн.Поскольку вам нужно что-то из дочернего пользовательского элемента управления из родительского пользовательского элемента управления, наилучшим подходом является привязка ViewModel к родительскому и дочернему элементам и доступ к дочерней модели представления в родительской модели представления и выполнение «того, что вы хотите».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...