sto correndo un semplice progetto MVVM e caduto al primo ostacolo. Lego i miei comandi usando l'approccio del comando di rilancio Josh Smiths.non può legarsi all'interno di dizionario risorse
Il problema è, il pulsante non è vincolante quando il pulsante è nella ResourceDictionary. Se sposto il codice (esattamente come è) nel mio MainWindow.xaml, il codice viene eseguito come desiderato.
Questo è il mio MainWindow.xaml
<Window x:Class="ForJon.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:ForJon.Ui.ViewModels"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="160" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.Resources>
<ResourceDictionary Source="Resources\ResourceDictionary.xaml" />
</Grid.Resources>
<Grid.DataContext>
<vm:MainWindowViewModel />
</Grid.DataContext>
<HeaderedContentControl
Header="Options"
Style="{StaticResource LeftMenu}"
Grid.Column="0"
/>
</Grid>
</Window>
E il dizionario risorse
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:view="clr-namespace:ForJon.Ui.Views"
xmlns:viewModel="clr-namespace:ForJon.Ui.ViewModels"
>
<Style x:Key="LeftMenu" TargetType="HeaderedContentControl">
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel>
<Button Content="Add" Command="{Binding AddCommand}" />
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="Width" Value="160"/>
</Style>
</ResourceDictionary>
Posso solo supporre che quando vincolante nel ResourceDictionary che non riesce a trovare il ViewModel (anche se io don Non so perché lo penso). Penso che stia cercando di associare un livello extra giù ...
Qualsiasi modo, qualcuno può spiegare perché non è in esecuzione all'interno del dizionario risorse per favore.
Questo risolve il problema, ma sicuramente ci deve essere un approccio più elegante di quello che ho fatto? Sarebbe meglio dichiarare DataContext nel Dizionario delle risorse, invece? Grazie! – Dave
@DaveRook Ottenere il DataContext tramite l'associazione di una RelativeSource non è affatto male, quando si sa che cosa il vostro fare. Tuttavia, se chiedi la mia opinione personale, non lo farei neanche io. Il concetto di dizionario risorse è per noi di riutilizzare il controllo di, ma quando abbiamo di legame nel dizionario risorsa che abbiamo fondamentalmente legato il 'style' fino ad una molto specifica VM & View che significa che potrebbe essere stato meglio definirla nell'articolo in se direttamente. – Viv
Wow, Viv, grazie. Birre su di me per questo. Sì, capisco perché tu prenda questo approccio, questo è veramente eccellente e un aiuto enorme. – Dave