與許多「哪個更好」的問題一樣。我會說「這取決於」上下文。
它們都存在,因爲它們都可以在不同的環境中起作用。只給出上面顯示的內容,我會選擇示例2.
但是,當您設置DataContext時,其所有子項都將繼承該DataContext。所以也許你正在使用Button。在你的按鈕中,你想讓它變得有點爵士樂,並用不同的顏色顯示四次。正如你可以看到下面,我會再選擇例1
例1:(注意DataContext的是按鈕,和他們一樣例2中做的TextBlocks不需要源)
<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>
當你綁定到一個簡單的對象,只有具有像一個Int16的一個表示你的情況,你可能只打算綁定,一旦顯示該值,從而選擇2最有意義。
一個很好的經驗法則......如果您發現自己將多個綁定設置爲相同的「源」,您應該只需綁定一個常見父FrameworkElement的DataContext。
我只是試圖想出一個簡單的例子來問這個問題;我從來沒有真正將數據綁定到任何類似的東西上(只有一個值),但我正在深入探討DataContext和Source之間是否有一個好的方法。感謝您的貢獻。 –