我有一个矩形,其背景颜色与变量绑定。当我点击矩形时,我想调出一个颜色选择器,以便用户可以改变矩形的颜色。
我遇到的问题是当我更改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)); }
}
答案 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;
}
}
}