我正在使用silverlight应用程序。尝试将按钮的单击命令绑定到ViewModel中的中继命令并将一些参数传递给它。代码为我的观点是:MVVM Light - 继电器命令间歇性地发送参数值
<Button x:Name="button" Content="Button" VerticalAlignment="Top" Margin="173,0,152,0">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<i:InvokeCommandAction CommandParameter="{Binding ActualWidth, ElementName=button, Mode=TwoWay}" Command="{Binding CRelayDecimal, Mode=OneWay}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
一个按钮传递它的ActualWidth作为命令参数的参数。我的视图模型的代码是:
public Page1()
{
InitializeComponent();
CRelayDecimal = new RelayCommand<Object>(this.GetDecimal);
}
public RelayCommand<Object> CRelayDecimal { get; private set; }
private void GetDecimal(Object Obj)
{
var value = (double)Obj;
}
现在,我看到这里的问题是,大多数时间传递的参数值,我收到的是0.0。间歇性地,我已经看到它的价值应该是精确的价值(如75.0)。
有没有其他方法可以做到这一点?
谢谢大家提前给予的帮助。
感谢和问候
NISHANT林蛙
使用按钮的默认'点击'事件,不会是一个昂贵的调用比较命令?然而,在我相信的命令参数可以更好地为目前的情况达到这个目的,不是吗? PLZ,如果我的理解错误,请纠正我? Registers Nishant – nishantcop
我从来没有测试点击事件比较与命令绑定的性能。我希望他们有一个非常小的差别,如果你加载100万次测试它们,可能需要1到2秒。在我看来,测试或担心这一点是没有意义的。 – Ekk
是的,真的没有性能上的巨大差异,但仍然建议使用命令,因为他们甚至没有内存泄漏危险,如事件可能会导致如果我们不正确处理它们..我想分享它作为知识共享:-)然而,您建议的解决方案也是一种优雅的方式,可用于更复杂的情况..再次感谢您的反馈和帮助! – nishantcop