gpt4 book ai didi

wpf - XAML 中的 Source 与 DataContext

转载 作者:行者123 更新时间:2023-12-04 21:42:39 24 4
gpt4 key购买 nike

这些方法中哪个最好?

<Window.Resources>
<sys:Int16 x:Key="MyValue">123</sys:Int16>
</Window.Resources>

<StackPanel>

<!-- method 1 -->
<TextBlock Text="{Binding}" DataContext="{StaticResource MyValue}" />

<!-- method 2 -->
<TextBlock Text="{Binding, Source={StaticResource MyValue}}" />

</StackPanel>

最佳答案

与许多“哪个更好”的问题一样。我会说“这取决于”上下文。

它们都存在,因为它们都可以在不同的环境中服务于一个目的。仅根据您上面显示的内容,我会选择示例 2。

但是,当您设置 DataContext 时,它的所有子项都将继承该 DataContext。所以也许你正在使用一个按钮。而在您的 Button 中,您想要让它更加活跃,并以不同的颜色显示文本四次。正如您在下面看到的,我会选择示例 1。

示例 1:(注意 DataContext 在按钮上,TextBlock 不需要像示例 2 中那样的 Source)

<Button DataContext="{StaticResource MyValue}" Height="Auto" Width="Auto" HorizontalAlignment="Center" VerticalAlignment="Center">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding}" Foreground="Red" />
<TextBlock Grid.Row="1" Grid.Column="0" Text="{Binding}" Foreground="Blue" />
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding}" Foreground="Yellow"/>
<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding}" Foreground="Green" />
</Grid>
</Button>

示例 2:
<Button Height="Auto" Width="Auto" HorizontalAlignment="Center" VerticalAlignment="Center">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding, Source={StaticResource MyValue}}" Foreground="Red" />
<TextBlock Grid.Row="1" Grid.Column="0" Text="{Binding, Source={StaticResource MyValue}}" Foreground="Blue" />
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding, Source={StaticResource MyValue}}" Foreground="Yellow"/>
<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding, Source={StaticResource MyValue}}" Foreground="Green" />
</Grid>
</Button>

当您绑定(bind)到一个在您的情况下只有一个表示形式(如 Int16)的简单对象时,您可能只会绑定(bind)并显示该值一次,因此选项 2 最有意义。

一个好的经验法则...如果您发现自己将“源”设置为不止一个绑定(bind),您可能应该只绑定(bind)一个公共(public)父 FrameworkElement 的 DataContext。

关于wpf - XAML 中的 Source 与 DataContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6947552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com