我正在尝试将以下命令重写为事件,我按照Arnaud Weils学习WPF MVVM书中的指导原则执行此操作。
<ToggleButton Margin="8 0 16 0" Command="{Binding ToggleBaseCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=IsChecked}" />
事件版本看起来像
<Button Content="Send commands to device" Style="{StaticResource MaterialDesignRaisedDarkButton}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:CallMethodAction TargetObject="{Binding}"
MethodName="ToggleBaseEvent"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
ToggleBaseCommand在viewmodel中如下所示:
public ICommand ToggleBaseCommand { get; } = new AnotherCommandImplementation(o => ApplyBase((bool)o));
private static void ApplyBase(bool isDark)
{
new PaletteHelper().SetLightDark(isDark);
}
创建ToggleBaseEvent时,我遇到的问题是如何将相对源传递给此方法。使用命令版本,这似乎相对简单,但没有明显的CommandParameter等效于事件版本。我想知道你是否知道如何解决这个问题,或者我最好是实施ICommand的做法。