我正在考虑将某个Silverlight UI绑定到C#类。在下面的示例代码中,XAML页面中有两个文本框。对一个文本框所做的任何更改都会在它失去焦点的那一刻反映在另一个文本框中,反之亦然。虽然我按照我想要的方式运行了这个例子,但我不知道底层是什么以及它是如何工作的。
这是C#代码
public class Person : INotifyPropertyChanged
{
public string FirstName
{
get
{return firstname;}
set
{ firstname = value;
FirePropertyChanged("FirstName");
}
}
private string firstname;
void FirePropertyChanged(string property)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
mainpage.xaml中的网格
<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>
Mainpage.xaml的Codebehind
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)中的文本框基于其“Binding”标记,在其设置的类(Person)中,在xaml代码隐藏文件(mainpage.xaml.cs)中知道要绑定到哪个属性通过在那里使用datacontext属性。
INotifyPropertyChanged是person类中的一个接口,它提供了一些钩子,允许Xaml UI知道UI中的Firstname属性何时被更改。 设置Firstname属性的那一刻,将调用FirePropertyChanged方法,该方法触发此事件 PropertyChangedEventHandler ,如此行中实现的那样
PropertyChanged(this, new PropertyChangedEventArgs(property));
任何人都可以详细说明此时幕后发生的事情,当其中一个文本框发生变化并失去焦点时;如何在Silverlight客户端UI上保持Binding属性,保持与C#类的联系,如果我错了则纠正我仍然在从silverlight UI下载的服务器上。
感谢您的时间。
答案 0 :(得分:2)
如果Person类位于同一个Silverlight UI项目中,那么它实际上位于客户端(而不是服务器)上。也许这让人更容易理解?