Ich habe ein MVVM Design-Muster eingerichtet, um Befehle und Arbeitsbereiche zu tun, so dass eine Taste gedrückt wird und der richtige Arbeitsbereich angezeigt wird. Die Schaltflächen verfügen über eine Vorlagenbindung, um basierend auf dem Befehl das richtige Bild für die Vorlage einzufügen. Ich habe ein anderes Feld zum Befehl für eine SelectedTemplateResource hinzugefügt, wenn die Schaltfläche aus dem Array von Schaltflächen ausgewählt wird. Das DataTemplate wird in das Hauptfenster gezogen, um die Schaltflächen anzuzeigen.Button Vorlage Stil, wenn ausgewählt
<DataTemplate x:Key="CommandsTemplate">
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Command="{Binding Path=Command}" Content="{Binding Path=DisplayName}" Template="{Utilities:BindableResource {Binding Path=TemplateResource}}">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Command}">
<Setter Property="Template">
<Setter.Value>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
Möchten ich tun möchte, den Wert der Setter auf den SelectedTemplateResource gesetzt ist, wie dies in der Vorlage der Schaltfläche namens TemplateResource. Diese werden alle über das Hauptfenster behandelt, um die entsprechende Vorlage für jede Schaltfläche festzulegen. Es funktioniert gut, aber ich bin nicht sicher, wie ich den ausgewählten Status beenden soll.
Auch bin ich nicht ganz sicher, ob ich die Datentrigger-Bindung auf den Befehlspfad festlegen sollte.
Kann mir jemand helfen, herauszufinden, wie man den ausgewählten Zustand eines Knopfes mit dem oben genannten Design einstellt?
Prost.
BEARBEITEN Ich bekomme die Verwendung des Togglebutton-Auslösers, aber die Bindung funktioniert nicht. Heres einige mehr Informationen als ich aus irgendeinem Grund Schlüssel ist in meinem App.xaml.cs null Fehler immer halten
Die ToggleButton ein Datatemplate in einer Datei MainWindowResources.xaml (Resource) genannt wird. Die Datei MainWindow.xaml ruft diese Datenvorlage ab. Ich habe eine bindabresource-Klasse, um mit der statischen Ressource für die Ressourcendatei zu helfen.
public class BindableResource : StaticResourceExtension
{
#region Fields
private static readonly DependencyProperty dummyProperty;
#endregion
#region Properties
/// <summary>
/// Gets and sets my binding.
/// </summary>
public Binding MyBinding { get; set; }
#endregion
#region Constructor
/// <summary>
/// Static contruction of the dummy dependency property.
/// </summary>
static BindableResource()
{
dummyProperty = DependencyProperty.RegisterAttached("Dummy", typeof(string), typeof(DependencyObject), new UIPropertyMetadata(null));
}
/// <summary>
/// Constructor.
/// </summary>
public BindableResource()
{
}
/// <summary>
/// Constructor with binding to set.
/// </summary>
/// <param name="binding"></param>
public BindableResource(Binding binding)
{
MyBinding = binding;
}
#endregion
#region External Members
/// <summary>
/// Get the resource key to bind to the resource.
/// </summary>
/// <param name="serviceProvider"></param>
/// <returns></returns>
public override object ProvideValue(IServiceProvider serviceProvider)
{
var target = (IProvideValueTarget)serviceProvider.GetService(typeof(IProvideValueTarget));
var targetObject = (FrameworkElement)target.TargetObject;
MyBinding.Source = targetObject.DataContext;
var DummyDO = new DependencyObject();
BindingOperations.SetBinding(DummyDO, dummyProperty, MyBinding);
ResourceKey = DummyDO.GetValue(dummyProperty);
return base.ProvideValue(serviceProvider);
}
#endregion
}
Dies funktioniert jedoch nicht für den Trigger-Setter-Wert.
<DataTemplate>
<ToggleButton Command="{Binding Path=Command}" Content="{Binding Path=DisplayName}" Template="{Utilities:BindableResource {Binding Path=TemplateResource}}">
<ToggleButton.Style>
<Style TargetType="ToggleButton">
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Template" Value="{Utilities:BindableResource {Binding Path=SelectedTemplateResource}}" />
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
</DataTemplate>
Irgendwelche Gedanken oder Ideen?
Das ist genau das, was ich suche, Toggle-Taste macht mehr Sinn, jedoch schaltet die Vorlage nicht, wenn Sie auf die Schaltfläche klicken. – bl4kh4k
Können Sie Ihre Ausgabe auf verbindliche Fehler überprüfen. Ich habe nur den Bindungsweg im Setter geschätzt. – GazTheDestroyer
Sagt, der Schlüssel ist null ... nichts in der Ausgabekonsole ... die Methode sieht richtig aus, wahrscheinlich nur eine dumme Bindung Einschränkung. – bl4kh4k