我最近从Windows窗体移到了WPF。我从Reed Copsey的系列'Better User and Developer Experiences – From Windows Forms to WPF with MVVM'开始。在4th part of the series,下面的代码应填写文本框与数据:我在做什么错,所以数据绑定目标不受数据绑定源的影响
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Path=Feed.Title, Mode=OneWay}" />
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Path=Feed.Link.AbsoluteUri, Mode=OneWay}" />
<TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Path=Feed.Description, Mode=OneWay}"/>
我试图用这个模板的代码为“更新目标(TextBlock.Text
)作为源(TextBox.Text
)更新”,那是我的全XAML代码:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="608.134" Width="768.284">
<Grid>
<Button Content="Button" HorizontalAlignment="Left" Height="28" Margin="442,56,0,0" VerticalAlignment="Top" Width="139" Click="Button_Click_1"/>
<TextBox x:Name="TextBox1" HorizontalAlignment="Left" Height="28" Margin="56,56,0,0" TextWrapping="Wrap" Text="TextBox1" VerticalAlignment="Top" Width="237"/>
<TextBlock HorizontalAlignment="Left" Height="66" Margin="56,168,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="285"
Text="{Binding Path=TextBox1.Text, Mode = OneWay}"/>
</Grid>
</Window>
为TextBlock
的文本的期望值为"TextBox1"
(TextBox1.Text
),但TextBlock
文字竟是空!
因此,我检查了what triggers source updates,并决定将绑定模式更改为TwoWay
,但我得到了相同的结果!
最后,我发现"How to: Control When the TextBox Text Updates the Source"显示如何做到这一点。根据什么Reed Copsey在他的系列的这一部分中说:
代码少意味着少维护,少测试,少担心。
,并根据上MSDN找到源:
<Label>Enter a Name:</Label>
<TextBox>
<TextBox.Text>
<Binding Source="{StaticResource myDataSource}" Path="Name"
UpdateSourceTrigger="PropertyChanged"/>
</TextBox.Text>
</TextBox>
<Label>The name you entered:</Label>
<TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=Name}"/>
我将打字(大致)相同的代码量。这样的任务(通过TextBox更改来更改TextBlock)可以使用常规事件处理程序完成。所以我的问题是:
- 如果使用大致相同数量的代码可以完成相同的任务,是什么使得WPF数据绑定如此特殊?
- 我的第一个代码出了什么问题?
- 在上面的MSDN代码中,他们必须键入源和目标的XAML代码。如果我希望源代码在课堂内成为价值,是否有可能完成这样的使命?如何?
任何帮助将不胜感激, 在此先感谢。
简洁地说,谢谢! –