Ich bin ein einfaches MVVM Projekt läuft und an der ersten Hürde gefallen. Ich binde meine Befehle mit Josh Smiths Relay Command-Ansatz.binden kann nicht innerhalb von Ressourcenverzeichnis
Das Problem ist, wird der Button nicht verbindlich, wenn der Knopf in der Resource ist. Wenn ich den Code (genau so) in meine MainWindow.xaml verschiebe, wird der Code wie gewünscht ausgeführt.
Das ist mein 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>
Und das Ressourcenverzeichnis
<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>
ich nur annehmen kann, wenn in den Resource Bindung, dass es nicht das Viewmodel (obwohl ich don finden Ich weiß nicht warum ich das denke. Ich denke, dass es versucht, eine zusätzliche Ebene zu binden unten ...
Jede Art und Weise, kann jemand erklären, warum es nicht aus dem Ressource Wörterbuch Ausführung bitte.
Dies löst das Problem aber sicher muss es eine elegantere Ansatz als das, was ich getan habe? Wäre es besser, stattdessen den DataContext im Resource Dictionary zu deklarieren? Vielen Dank! – Dave
@DaveRook Das Abrufen des DataContext über eine RelativeSource-Bindung ist nicht schlecht, wenn Sie wissen, was Sie tun. Wenn Sie jedoch nach meiner persönlichen Meinung fragen, würde ich das auch nicht tun. Konzept der Ressourcenverzeichnis ist für uns die Kontrolle des wiederzuverwenden, aber wenn wir die in der Ressource-Wörterbuch Bindung Sie haben im Grunde die 'Style' bis auf eine ganz bestimmte VM & View gebunden, das bedeutet, dass Sie vielleicht besser dran gewesen, es im Item definieren selbst direkt. – Viv
Wow, Viv, danke. Beers auf mich dafür. Ja, ich kann verstehen, warum Sie diesen Ansatz gewählt haben, das ist wirklich exzellent und eine enorme Hilfe. – Dave