Как и во многих «что лучше» вопросах. Я бы сказал, что «это зависит» от контекста.
Они оба существуют, потому что они оба могут служить цели в разных контекстах. Учитывая только то, что вы показали выше, я бы выбрал Пример 2.
Однако, когда вы устанавливаете DataContext, все его дочерние элементы наследуют этот DataContext. Так что, возможно, вместо этого вы используете кнопку. А внутри вашей кнопки вы хотите немного поднять ее и отобразить текст четыре раза, каждый из которых имеет свой цвет. Как вы можете видеть ниже, я бы тогда выбрал Пример 1.
Пример 1: (обратите внимание, что DataContext находится на кнопке, и TextBlock не нуждается в источнике, как в примере 2)
<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 имеет больше смысла.
Хорошее эмпирическое правило ... если вы обнаружите, что устанавливаете 'Source' для одной и той же вещи более чем одной привязки, вам, вероятно, следует просто связать DataContext общего родительского FrameworkElement.