编辑CommandParameters绑定变量

时间:2016-03-14 23:46:32

标签: c# wpf xaml

我有一个矩形,其背景颜色与变量绑定。当我点击矩形时,我想调出一个颜色选择器,以便用户可以改变矩形的颜色。

我遇到的问题是当我更改o时它没有像我预期的那样改变WorkflowModel.BackgroundColour,它只会改变o

我知道如何实现这一点,或者我是否可以通过某种方式传递ref WorkflowModel.BackgroundColour并以此方式进行编辑。

XAML:

<Rectangle Stroke="Black" StrokeThickness="1" Grid.Row="6" Grid.Column="1" Height="25" Width="25">
    <Rectangle.InputBindings>
        <MouseBinding MouseAction="LeftClick" 
                        CommandParameter="{Binding WorkflowModel.BackgroundColour}"                                       
                        Command="{Binding ChangeColorCommand}"/>
    </Rectangle.InputBindings>
    <Rectangle.Fill>
        <SolidColorBrush Color="{Binding WorkflowModel.BackgroundColour}"/>
    </Rectangle.Fill>
</Rectangle>

命令:

private void ChangeColorCommandExecute(object o)
{
    Views.DialogViews.ColorPickerDialog cpd = new Views.DialogViews.ColorPickerDialog((Color)o);
    cpd.ShowDialog();

    if(cpd.DialogResult == Views.DialogViews.ColorPickerDialog.DialogResults.Ok)
    {
        o = cpd.SelectedColor;
    }
}

public ICommand ChangeColorCommand
{
    get { return new RelayCommand(o => ChangeColorCommandExecute(o)); }
}  

1 个答案:

答案 0 :(得分:1)

更改CommandParameter以绑定到WorkflowModel。然后在ChangeColorCommandExecute中将object o转换为WorkflowModel并使用BackgroundColour属性。

如果不适合让命令处理程序依赖WorkflowModel将颜色包装在自己的ColourViewModel中,并将命令参数绑定到ColourViewModel

public class ColourViewModel :INotifyPropertyChanged
{
  private Color _colour;
  public Color Colour 
  {
    get { return _colour; }
    set
    {
      _colour = value;
      // raise change notification
    }
  }
}

private void ChangeColorCommandExecute(object o)
{
    ColourViewModel cvm = o as ColourViewModel;
    if (cvm != null)
    {
       Views.DialogViews.ColorPickerDialog cpd = new Views.DialogViews.ColorPickerDialog(cvm.Colour);
      cpd.ShowDialog();

      if(cpd.DialogResult == Views.DialogViews.ColorPickerDialog.DialogResults.Ok)
      {
        cvm.Colour = cpd.SelectedColor;
      }
    }
}