Всем привет. Бывает для не которых задач необходимо передавать данные из одной формы в другую. Способов решения такой задачи достаточно много. Но я хотел именно показать как можно сделать практически всю логику вынеся в XAML разметку и как можно меньше использовать C#. И так я в своем примере покажу как можно из одной формы окна TextBox привязать к Lable в другом окне формы.
App.xaml
Для этого в XAML разметке файла App.xaml впишем следующий код.
<Application x:Class="WpfApp10.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp10"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<sys:String x:Key="txt">nookery.ru</sys:String>
</ResourceDictionary>
</Application.Resources>
</Application>
И так мы тут подключили пространство имен mscorlib и создали объект класса String это будет наша глобальная переменная благодаря которой мы сможем обмениваться текстом между двух форм.
MainWindows.xaml
Далее в Xaml разметке MainWindows впишем следующий код.
<Window x:Class="WpfApp10.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp10"
mc:Ignorable="d"
Title="MainWindow" Height="317.72" Width="455.082">
<Grid>
<TextBox x:Name="mainTextBox" HorizontalAlignment="Left" Height="38" Text="Главное окно" VerticalAlignment="Top" FontSize="25" FontWeight="Bold" PreviewKeyDown="txtColor_PreviewKeyDown"/>
</Grid>
</Window>
Здесь ничего особо нет, кроме как созданного события которое происходит при нажатии любой кнопки на клавиатуре.
MainWindows.cs
А вот что мы вписываем в обработчике на события, и конструкторе класса MainForm
using System.Windows;
using System.Windows.Input;
namespace WpfApp10
{
/// <summary>
/// Логика взаимодействия для MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Window2 win = new Window2();
win.Show();
}
private void txtColor_PreviewKeyDown(object sender, KeyEventArgs e)
{
Application.Current.Resources["txt"] = mainTextBox.Text;
}
}
}
В конструкторе мы создаем еще одну форму и отображаем ее. Так же в обработчике события нажатия клавиш, реализовано сохранение текста, в нашу глобальную переменную, находящуюся в ресурсах файла App.xaml.
Windows2.xaml
Теперь посмотрим xaml разметку нашей второй формы.
<Window x:Class="WpfApp10.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp10"
mc:Ignorable="d"
xmlns:ff="WpfApp10.MainWindows"
Title="Window2" Height="200" Width="200"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Grid>
<Label x:Name="secondaryTexBox" HorizontalAlignment="Left" Height="38" Content="{DynamicResource txt}" VerticalAlignment="Top" Width="192" FontSize="14"/>
</Grid>
</Window>
Как мы видим в разметке мы привязали Label к нашей глобальной переменной. И теперь когда мы будем писать в главной форме окна в textBox вся информация будет видна в Label в дочерней форме.

Если захотеть можно не много изменив код, вместо Label вставить TextBox так же создать обработчик события во второй форме на нажатие клавиш, и сделать привязку на глобальную переменную в первой форме, то в итоге мы получим два окна в котором мы можем видеть напечатанный текст сразу в двух окнах, при чем не имеет значения в каком окне мы будем печатать.
