我想知道是否可能将Command
绑定到ComboBox
,我实际上在Command
上实现了Menu
逻辑,这样:
<Menu HorizontalAlignment="Left" VerticalAlignment="Stretch">
<MenuItem Header="Theme" Width="100"
ItemContainerStyle="{StaticResource ThemeColorMenuItemStyle}"
ItemsSource="{Binding Themes, Mode=OneTime}" />
</Menu>
ItemContainerStyle
具有此结构:
<Style x:Key="AccentColorMenuItemStyle"
BasedOn="{StaticResource MetroMenuItem}" TargetType="{x:Type MenuItem}">
<Setter Property="CommandParameter" Value="{Binding }" />
<Setter Property="Command" Value="{Binding DataContext.ApplyAccentCommand,
RelativeSource={RelativeSource AncestorType=Window}}" />
<Setter Property="Header" Value="{Binding Name, Mode=OneWay}" />
<Setter Property="Icon" Value="{StaticResource AccentMenuIcon}" />
</Style>
这是命令:
public ICommand ApplyAccentCommand { get; } = new SimpleCommand(o => ApplyAccent((Swatch)o));
private static void ApplyAccent(Swatch swatch)
{
new PaletteHelper().ReplaceAccentColor(swatch);
}
此MenuItem
将Theme
提供的MaterialDesignInXaml
集合绑定为具有此类的Swatch
模型:
public class Swatch
{
public Swatch(string name, IEnumerable<Hue> primaryHues, IEnumerable<Hue> accentHues);
public string Name { get; }
public Hue ExemplarHue { get; }
public Hue AccentExemplarHue { get; }
public IEnumerable<Hue> PrimaryHues { get; }
public IEnumerable<Hue> AccentHues { get; }
public bool IsAccented { get; }
public override string ToString();
}
所以,回到问题:可能在ComboBox
上有这个逻辑吗? &#39;因为MenuItem
没有SelectedItem
属性,我需要这个。
答案 0 :(得分:0)
您可以使用混合行为并将事件绑定到命令。您需要引用System.Windows.Interactivity
命名空间,您可以通过安装Expression.Blend.Sdk
NuGet包来获取它。
安装完成后,将以下XAML命名空间添加到您的页面:
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
然后按如下方式使用它:
<ComboBox>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding MyCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</ComboBox>
MvvmLight
工具包还提供名为InvokeCommandAction
的{{1}}更高级版本,允许您指定EventToCommand
以便能够从中获取特定值事件的EventArgsConverter
实例。