Sterować oknem niemodalnym najłatwiej jest za pomocą DependencyProperty
. Dzięki DependencyProperty
możemy używać bindingu
.
Zaprojektuj sobie na początku drugie okno niemodalne. Będzie ono posiadało DependencyProperty
o nazwie CurrentText
:
C#:
public partial class MySecondWindow : Window
{
public MySecondWindow()
{
InitializeComponent();
}
public string CurrentText
{
get { return (string)GetValue(CurrentTextProperty); }
set { SetValue(CurrentTextProperty, value); }
}
public static readonly DependencyProperty CurrentTextProperty =
DependencyProperty.Register("CurrentText", typeof(string), typeof(MySecondWindow), new PropertyMetadata(""));
}
O DependencyProperty bez problemu wyczytasz w google. Jest tego pełno.
Następnie musimy do tego DependencyProperty zbindować w obie strony tekst w naszej kontrolce:
XAML:
<Window x:Class="WpfApp1.MySecondWindow"
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:WpfApp1"
mc:Ignorable="d"
Title="MySecondWindow"
Height="450"
Width="800"
x:Name="hWindow">
<Grid>
<TextBox Text="{Binding ElementName=hWindow, Path=CurrentText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBox>
</Grid>
</Window>
Teraz jedyne co musisz zrobić, aby zmienić tekst z poziomu pierwszego okna to posiadać referencję do utworzonego dialogu niemodalnego.
C#
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MySecondWindow = new MySecondWindow();
MySecondWindow.Show();
}
MySecondWindow MySecondWindow;
public void DoAction()
{
MySecondWindow.CurrentText = "Akcja wykonana";
}
}