【问题标题】:Edit A CommandParameters Bound Variable编辑 CommandParameters 绑定变量
【发布时间】:2016-03-14 23:46:32
【问题描述】:

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

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

知道如何实现这一点,或者是否有某种方法可以传递WorkflowModel.BackgroundColourref 并以这种方式进行编辑。

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)); }
}  

【问题讨论】:

    标签: c# wpf xaml


    【解决方案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;
          }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-15
      • 2017-08-08
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      相关资源
      最近更新 更多