根据Silverlight TwoWay绑定的工作原理,当我更改FirstName字段中的数据时,它应该更改CheckFirstName字段中的值。
为什么不是这样?
谢谢Jeff,就是这样,对于其他人:这里是the full solution with downloadable code。
XAML:
<StackPanel>
<Grid x:Name="GridCustomerDetails">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="300"/>
</Grid.ColumnDefinitions>
<TextBlock VerticalAlignment="Center" Margin="10" Grid.Row="0" Grid.Column="0">First Name:</TextBlock>
<TextBox Margin="10" Grid.Row="0" Grid.Column="1" Text="{Binding FirstName, Mode=TwoWay}"/>
<TextBlock VerticalAlignment="Center" Margin="10" Grid.Row="1" Grid.Column="0">Last Name:</TextBlock>
<TextBox Margin="10" Grid.Row="1" Grid.Column="1" Text="{Binding LastName}"/>
<TextBlock VerticalAlignment="Center" Margin="10" Grid.Row="2" Grid.Column="0">Address:</TextBlock>
<TextBox Margin="10" Grid.Row="2" Grid.Column="1" Text="{Binding Address}"/>
</Grid>
<Border Background="Tan" Margin="10">
<TextBlock x:Name="CheckFirstName"/>
</Border>
</StackPanel>
代码背后:
public Page()
{
InitializeComponent();
Customer customer = new Customer();
customer.FirstName = "Jim";
customer.LastName = "Taylor";
customer.Address = "72384 South Northern Blvd.";
GridCustomerDetails.DataContext = customer;
Customer customerOutput = (Customer)GridCustomerDetails.DataContext;
CheckFirstName.Text = customer.FirstName;
}
答案 0 :(得分:5)
您的Customer
类型必须支持INotifyPropertyChanged
才能让绑定知道您的FirstName
属性值何时发生了变化。
此tutorial可以帮助您使代码生效。
答案 1 :(得分:1)
解决方案是使用CheckFirstName
答案 2 :(得分:1)
Grid容器内的控件不知道FirstName,LastName和Address是什么。我认为您需要将网格绑定到代码隐藏中的对象:
<Grid x:Name="GridCustomerDetails" DataContext="Customer">
现在,该容器内的每个控件都可以绑定到Customer的属性。你这样绑定它:
<TextBox Margin="10" Grid.Row="0" Grid.Column="1"
Text="{Binding Path=FirstName, Mode=TwoWay}"/>
在您的代码中,确保“Customer”是一个类对象,并公开声明。
如果这不起作用,请尝试在顶部的页面声明和命名空间中添加x:Name =“”。
我希望这有帮助!