我正在使用RGB选择器开发MVVM应用程序。我为每个频道设置了3个滑块,并希望使用路由事件来捕获每个滑块上的ValueChanged
事件
<StackPanel Grid.Row="0" Grid.Column="1" Slider.ValueChanged="DoSmth">
<Slider Value="{Binding R}" Minimum="0" Maximum="255" />
<Slider Value="{Binding G}" Minimum="0" Maximum="255" />
<Slider Value="{Binding B}" Minimum="0" Maximum="255" />
</StackPanel>
现在,这是一个MVVM应用程序,我想为此使用命令。但是,我无法找到发送命令的方法,而无需单独将其分配给每个滑块。我读了一下“路由命令”,但这也没有给我一个解决方案。
我怎样才能做到这一点?
答案 0 :(得分:1)
如果您坚持使用ICommand
,则应使用附加属性包装Slider.ValueChanged
事件。您可以在我对What's the best way to pass event to ViewModel?问题的回答中了解如何执行此操作。
但是,您真的不需要使用任何ICommand
...每次在视图模型中,其中一个数据绑定属性发生变化时,您肯定可以创建一个新的Color
吗?此示例使用户无需使用任何ICommand
s即可更改颜色:
<StackPanel Grid.Row="0" Grid.Column="1">
<Slider Value="{Binding R}" Minimum="0" Maximum="255" />
<Slider Value="{Binding G}" Minimum="0" Maximum="255" />
<Slider Value="{Binding B}" Minimum="0" Maximum="255" />
<Rectangle HorizontalAlignment="Stretch" Height="100">
<Rectangle.Fill>
<SolidColorBrush Color="{Binding Color}" />
</Rectangle.Fill>
</Rectangle>
</StackPanel>
在视图模型中:
private byte r = 127, g = 127, b = 127;
public byte R
{
get { return r; }
set { r = value; Color = Color.FromArgb((byte)255, R, G, B); NotifyPropertyChanged("R"); }
}
public byte G
{
get { return g; }
set { g = value; Color = Color.FromArgb((byte)255, R, G, B); NotifyPropertyChanged("G"); }
}
public byte B
{
get { return b; }
set { b = value; Color = Color.FromArgb((byte)255, R, G, B); NotifyPropertyChanged("B"); }
}
private Color color = Colors.Black;
public Color Color
{
get { return color; }
set { color = value; NotifyPropertyChanged("Color"); }
}