В этом приведенном ниже коде изначально текстовое поле показывает текст как «XYZ», но когда я нажимаю на кнопку, которая меняет свойство FlatName Address. Это не отражается в пользовательском интерфейсе, то есть текстовое поле не обновляется.
<Window x:Class="WpfApp5.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:WpfApp5"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Button Content="Button" HorizontalAlignment="Left" Margin="132,184,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
<TextBox Text="{Binding Address.FlatName, Mode=TwoWay}" HorizontalAlignment="Left" Height="23" Margin="199,134,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
</Grid>
</Window>
C# Фрагмент кода:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp5
{
public class Address
{
public string FlatName
{
get; set;
} = "XYZ";
}
public class Person : DependencyObject
{
public string Name
{
get { return (string)GetValue(NameProperty); }
set { SetValue(NameProperty, value); }
}
// Using a DependencyProperty as the backing store for Name. This enables animation, styling, binding, etc...
public static readonly DependencyProperty NameProperty =
DependencyProperty.Register("Name",
typeof(string),
typeof(Person),
new FrameworkPropertyMetadata(
"",
FrameworkPropertyMetadataOptions.AffectsMeasure
));
public Address Address
{
get { return (Address)GetValue(AddressProperty); }
set { SetValue(AddressProperty, value); }
}
// Using a DependencyProperty as the backing store for Name. This enables animation, styling, binding, etc...
public static readonly DependencyProperty AddressProperty =
DependencyProperty.Register("Address",
typeof(Address),
typeof(Person),
new FrameworkPropertyMetadata(
new Address(),
FrameworkPropertyMetadataOptions.AffectsMeasure
));
}
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
Person person = new Person();
public MainWindow()
{
InitializeComponent();
this.DataContext = person;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
person.Address.FlatName = "ABC";
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
//string Area = person.Address.FlatName;
}
}
}
Если вы видите, у меня есть класс человека, который является DataContext для моей страницы. В классе Person есть свойство с именем Address , это очень важно, когда у меня есть одно свойство с именем FlatName, которое является Bindind с TextField формы. Если я обновляю FlatName с помощью API, который не обновляет пользовательский интерфейс.