Я новичок в WPF и пытаюсь связать текстовое поле, расположенное в главном окне, от пользовательского элемента управления.WPF Bind Текстовое поле в основных окнах из пользовательских элементов управления
<Window x:Class="Databinding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="360" Width="490">
<Grid HorizontalAlignment="Left" Width="480">
<TextBox x:Name="EventTitle" HorizontalAlignment="Left" Height="23" Margin="40,19,0,0" TextWrapping="Wrap" Text="{Binding Path=FirstName}" VerticalAlignment="Top" Width="120"/>
<Button Content="Button" HorizontalAlignment="Left" Margin="195,20,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
<StackPanel x:Name="Stck_Main" HorizontalAlignment="Left" Height="230" Margin="22,75,0,0" VerticalAlignment="Top" Width="439"/>
<Button Content="UC" HorizontalAlignment="Left" Margin="371,20,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>
</Grid>
Я также создал класс для управления Обновить значение
class UIcontrol : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _firstName;
protected void Notify(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public string FirstName
{
get { return _firstName; }
set
{
if (value != _firstName)
{
_firstName = value;
Notify("FirstName");
}
}
}
}
Мой вопрос: Внутри главного окна я использовал простой пользовательский элемент управления. Я хочу связать значение текстового поля с этим пользовательским элементом управления. привязка работает от кнопки в главном окне, но ничего не происходит из-за пользовательского контроля. Я полагаю, что datacontextis неправильно, но вы могли бы помочь мне найти правильный путь.
код за MainWindow
public partial class MainWindow : Window
{
private UIcontrol viewModel;
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
viewModel = new UIcontrol();
DataContext = viewModel;
viewModel.FirstName = "Mike";
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
UC1 myUC = new UC1();
Stck_Main.Children.Clear();
Stck_Main.Children.Add(myUC);
}
}
Контрольный код пользователя за это
public partial class UC1 : UserControl
{
private UIcontrol viewModel;
public UC1()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
viewModel = new UIcontrol();
DataContext = viewModel;
viewModel.FirstName = "Doe";
}
}
И это XAML:
UserControl x:Class="Databinding.UC1"
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="300" d:DesignWidth="300">
<Grid Margin="0,0,10,43">
<Canvas Height="194" Margin="25,30,71,0" VerticalAlignment="Top" Background="White">
<Button Content="Button" Canvas.Left="100" Canvas.Top="81" Width="75" Click="Button_Click" />
</Canvas>
</Grid>
Не могли бы вы поделиться XAML из UC1? –
UC1 xaml herunder – GcH
Насколько я понимаю, вы видите «Майк», но не 'Doe'? верный? –