我试图理解数据绑定的概念,我了解到数据绑定是将UI元素绑定到对象的方式,这样任何一个中的任何更改都会影响另一个(在双向绑定的情况下) ,但这不适用于这个简单的例子:
我的班级:
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会显示&#34;人员姓名&#34;但是点击changeName按钮并不会改变TextBlock中显示的内容,所以我在这里缺少什么?
答案 0 :(得分:2)
您错过了INotifyPropertyChanged
接口实现。您的XAML不知道它已被更改。
易于修复,使用https://github.com/Fody/PropertyChanged
它将添加代码以通知每个人该属性已更改。
[ImplementPropertyChanged]
public class person
{
public string name { get; set; }
public override string ToString()
{
return this.name;
}
}
答案 1 :(得分:0)
简单数据绑定(2012年4月10日 Mahak Gupta发布的原始代码)
第一步:首先我们在项目中创建一个网格:
<Grid x:Name="StuInfo">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" MinWidth="77"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
</Grid>
Step2:之后我们在程序中创建了两个TextBlocks和两个TextBoxes,我们还创建了一个Button(Next)来根据程序查看Next Record。
<TextBlock Text="First Name" Margin="10"></TextBlock>
<TextBlock Text="Last Name" Margin="10" Grid.Row="1"></TextBlock>
<TextBox Text="{Binding fname}" Margin="10" Grid.Column="1"></TextBox>
<TextBox Text="{Binding lname}" Margin="10" Grid.Column="1" Grid.Row="1"></TextBox>
<Button HorizontalAlignment="Left" Margin="0,12,0,9" Name="button1" Width="75" Grid.Column="1" Grid.Row="2">Next</Button>
步骤3:现在我们在.cs页面中添加一个Loaded Event处理程序。当客户端想要加载应用程序时,将调用此事件:
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(Page_Loaded);
}
void Page_Loaded(object sender, RoutedEventArgs e)
{
}
}
第4步:现在我们在程序中添加一个类:
public class Stu
{
public string fname { get; set; }
public string lname { get; set; }
}
步骤5:现在我们在Loded Event Handler中编写以下代码:
void Page_Loaded(object sender, RoutedEventArgs e)
{
Stu s = new Stu();
{
s.fname = "Mahak";
s.lname = "Garg";
};
this.StuInfo.DataContext = s;
}
正如我们在.xaml页面中提到TextBox中的Binding:
<TextBox Text="{Binding fname}" Margin="10" Grid.Column="1"></TextBox>
<TextBox Text="{Binding lname}" Margin="10" Grid.Column="1" Grid.Row="1"></TextBox>
输出结果为:
Step6:现在我们添加另一个Event Handler,用于Next Button:
public Window1()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(Page_Loaded);
this.button1.Click += new RoutedEventHandler(button1_Click);
}
void button1_Click(object sender, RoutedEventArgs e)
{
Stu s = new Stu();
{
s.fname = "Juhi";
s.lname = "Gupta";
};
this.StuInfo.DataContext = s;
}
这里我们在程序中添加另一个数据。当我们点击Next按钮时,输出将是: