C# Silverlight UI到.NET类的绑定工作原理
我正在考虑将某个silverlight UI绑定到C#类。在下面的示例代码中,XAML页面中有两个文本框。对一个文本框所做的任何更改都会在另一个文本框失去焦点时反映出来,反之亦然。虽然我所举的例子按照我所希望的方式工作,但我不知道引擎盖下到底发生了什么以及它是如何工作的 这是C代码 mainpage.xaml中的网格C# Silverlight UI到.NET类的绑定工作原理,c#,.net,silverlight,C#,.net,Silverlight,我正在考虑将某个silverlight UI绑定到C#类。在下面的示例代码中,XAML页面中有两个文本框。对一个文本框所做的任何更改都会在另一个文本框失去焦点时反映出来,反之亦然。虽然我所举的例子按照我所希望的方式工作,但我不知道引擎盖下到底发生了什么以及它是如何工作的 这是C代码 mainpage.xaml中的网格 <Grid x:Name="MyLayoutRoot" Background="White" ShowGridLines="True"> <Te
<Grid x:Name="MyLayoutRoot" Background="White" ShowGridLines="True">
<TextBox Text="{Binding FirstName, Mode=TwoWay}" Grid.Column="1"></TextBox>
<TextBox Text="{Binding FirstName, Mode=TwoWay}" Grid.Column="1" Grid.Row="3"></TextBox>
</Grid>
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(Page_Loaded);
}
void Page_Loaded(object sender, RoutedEventArgs e)
{
Person p = new Person()
{
FirstName ="Dee"
};
MyLayoutRoot.DataContext = p;
}
}
到目前为止,我的理解有点模糊,我的理解是:
xaml(mainpage.xaml)中的文本框通过在xaml代码隐藏文件(mainpage.xaml.cs)中使用datacontext属性,根据其“Binding”标记,从设置时使用的类(Person)知道要绑定到哪个属性
INotifyPropertyChanged是person类中的一个接口,它提供了一些钩子,允许Xaml UI知道何时在UI中更改了Firstname属性。
设置Firstname属性的那一刻,将调用FirePropertyChanged方法,该方法将触发此事件PropertyChangedEventHandler,如此行所实现
PropertyChanged(这是新的PropertyChangedEventArgs(property))代码>
当其中一个文本框发生变化并失去焦点时,有人能详细描述一下此时的幕后情况吗;Silverlight客户端UI上的Binding属性如何保持与C#类的联系,如果我错了,请纠正我,C#类仍然在下载Silverlight UI的服务器上
谢谢您的时间。如果Person类在同一个Silverlight UI项目中,那么它实际上在客户端(而不是服务器)上。也许这样更容易理解?不必这样。我举了我的例子。但在现实生活中,我会假设这个类来自数据层,它没有与silverlight UIOk一起移植,我认为在这种情况下绑定不会起作用。我可能错了,在这种情况下,您必须以某种方式将数据传输到客户端,然后绑定到客户端对象。绑定没有那么神奇,它们不跨互联网;)如果我没弄错的话,唯一能传输到客户端的就是xap文件。。c#类是否嵌入其中?Silverlight客户端项目被编译到XAP文件中。如果您的Person类在此项目中,那么它将被编译成XAP文件并传输到客户端。正如Bubblewrap所说,这种绑定不会自动在客户端和服务器之间工作(通过internet)
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(Page_Loaded);
}
void Page_Loaded(object sender, RoutedEventArgs e)
{
Person p = new Person()
{
FirstName ="Dee"
};
MyLayoutRoot.DataContext = p;
}
}