У меня есть шаблон дизайна mvvm, созданный для выполнения команд и рабочих областей, чтобы кнопка нажата и отобразилось правильное рабочее пространство. Кнопки имеют привязку к шаблону, чтобы вытащить правильное изображение для шаблона на основе команды. Я добавил другое поле в команду для SelectedTemplateResource, когда кнопка выбрана из набора кнопок. DataTemplate вытягивается в главный экран, чтобы отображать кнопки.Кнопка Стиль шаблона при выборе
<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>
Хочет, я хочу сделать, это установить значение сеттера в SelectedTemplateResource как и в шаблоне кнопки под названием TemplateResource. Все они обрабатываются через mainwindowviewmodel, чтобы установить соответствующий шаблон для каждой кнопки, и он работает хорошо, но я не уверен, как закончить выбранное состояние.
Кроме того, я не совсем уверен, должен ли я устанавливать привязку datatrigger к пути к команде.
Может ли кто-нибудь помочь мне разобраться, как установить выбранное состояние кнопки, используя описанный выше проект?
Cheers.
EDIT Я получаю использование переключателя togglebutton, но привязка не работает. Heres некоторые больше информации, как по какой-то причине, я получаю ключ является нулевой ошибкой в моем App.xaml.cs
ToggleButton является DataTemplate в файле MainWindowResources.xaml (ResourceDictionary). Файл MainWindow.xaml извлекает этот шаблон данных. У меня есть класс bindableresource, который поможет со статическим ресурсом для файла ресурсов.
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
}
Однако это не работает для значения установки триггеров.
<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>
Любые мысли или идеи?
Это именно то, что я ищу, кнопка переключения имеет смысл, однако шаблон не переключается при нажатии на кнопку. – bl4kh4k
Можете ли вы проверить свой результат на наличие ошибок привязки. Я просто угадал путь привязки в сеттер. – GazTheDestroyer
Продолжает говорить, что ключ имеет нулевое значение ... ничего в выходной консоли ... метод выглядит корректно, возможно, просто глупое ограничение привязки. – bl4kh4k