数据绑定不起作用
Data Binding is not working
我正在尝试理解数据绑定的概念,我了解到数据绑定是您可以将 UI 元素绑定到对象的方式,这样其中任何一个的任何更改都会影响另一个(在双向绑定的情况),但这在这个简单的例子中不起作用:
我的 class :
namespace dataBinding.Models
{
public class person
{
public string name { get; set; }
public override string ToString()
{
return this.name;
}
}
}
XAML :
xmlns:models="using:dataBinding.Models"
<Page.DataContext>
<models:person x:Name="personObject" name="Person's Name"/>
</Page.DataContext>
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Right"
Text="{Binding name, Mode=TwoWay}" />
<Button Name="changeNameButton"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Content="Change Name" />
C# 代码:
namespace dataBinding
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
changeNameButton.Click += ChangeNameButton_Click;
}
private void ChangeNameButton_Click(object sender, RoutedEventArgs e)
{
personObject.name = "New Name";
}
}
}
当我 运行 应用程序时,TextBlock 显示 "Person's Name" 但单击更改名称按钮不会更改 TextBlock 中显示的内容,那么,我在这里缺少什么?
您缺少 INotifyPropertyChanged
接口实现。您的 XAML 不知道它已被更改。
很容易修复,使用https://github.com/Fody/PropertyChanged
它会添加代码来通知大家属性已经改变。
[ImplementPropertyChanged]
public class person
{
public string name { get; set; }
public override string ToString()
{
return this.name;
}
}
我正在尝试理解数据绑定的概念,我了解到数据绑定是您可以将 UI 元素绑定到对象的方式,这样其中任何一个的任何更改都会影响另一个(在双向绑定的情况),但这在这个简单的例子中不起作用:
我的 class :
namespace dataBinding.Models
{
public class person
{
public string name { get; set; }
public override string ToString()
{
return this.name;
}
}
}
XAML :
xmlns:models="using:dataBinding.Models"
<Page.DataContext>
<models:person x:Name="personObject" name="Person's Name"/>
</Page.DataContext>
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Right"
Text="{Binding name, Mode=TwoWay}" />
<Button Name="changeNameButton"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Content="Change Name" />
C# 代码:
namespace dataBinding
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
changeNameButton.Click += ChangeNameButton_Click;
}
private void ChangeNameButton_Click(object sender, RoutedEventArgs e)
{
personObject.name = "New Name";
}
}
}
当我 运行 应用程序时,TextBlock 显示 "Person's Name" 但单击更改名称按钮不会更改 TextBlock 中显示的内容,那么,我在这里缺少什么?
您缺少 INotifyPropertyChanged
接口实现。您的 XAML 不知道它已被更改。
很容易修复,使用https://github.com/Fody/PropertyChanged
它会添加代码来通知大家属性已经改变。
[ImplementPropertyChanged]
public class person
{
public string name { get; set; }
public override string ToString()
{
return this.name;
}
}