Xaml MVVM将cutom属性绑定到视图模型

Xaml MVVM将cutom属性绑定到视图模型,xaml,mvvm,dependency-properties,Xaml,Mvvm,Dependency Properties,我是MVVVM的新手,所以如果这是一个愚蠢的问题,请原谅我。我正在使用这个例子,并包括在那个里的图书馆,以获得由用户指示的图像像素的颜色。它看起来很漂亮,并以矩形选定颜色显示,但我需要将selecteed值绑定到viewmodel 以下是我的xaml代码: <Window x:Class="MovieEditor.View.PixelSelector" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentat

我是MVVVM的新手,所以如果这是一个愚蠢的问题,请原谅我。我正在使用这个例子,并包括在那个里的图书馆,以获得由用户指示的图像像素的颜色。它看起来很漂亮,并以矩形选定颜色显示,但我需要将selecteed值绑定到viewmodel

以下是我的xaml代码:

<Window x:Class="MovieEditor.View.PixelSelector"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:ctrls="clr-namespace:ColorPickerControls;assembly=ColorPickerControls"
        xmlns:local="clr-namespace:MovieEditor.MVVMCommon"
         Title="FilterDesigner" Height="550" Width="550"
                Icon="..\Resources\Images\icon.ico"
        xmlns:VM="clr-namespace:MovieEditor.ViewModel">
        <Window.DataContext>
        <VM:PixelSelectorVM/>
    </Window.DataContext>
    <Window.Resources>
        <local:ColorToBrushConverter x:Key="ColorToBrushConverter"/>
    </Window.Resources>
    <Grid Background="#FF191919" >
        <DockPanel>
            <Grid Margin="10,10,10,1">
                <Grid.RowDefinitions>
                    <RowDefinition/>
                    <RowDefinition Height="Auto" MinHeight="38"/>
                </Grid.RowDefinitions>

                <Border BorderBrush="White" BorderThickness="5" Margin="0,39,0,11">
                    <ctrls:ImageColorPicker Binding.XmlNamespaceManager="{Binding  p PixelSelectorVM.MyImageColorPicker, UpdateSourceTrigger=PropertyChanged}" 
                                            x:Name="image" Source ="{Binding Frame}" Margin="0,36,0,0"
                                            />

                </Border>
                <Border Width="77"
                    HorizontalAlignment="Center"
                    BorderBrush="White" BorderThickness="1" Margin="263,2,182,435">
                    <Rectangle Fill="{Binding ElementName=image, Path=SelectedColor,
                    Converter={StaticResource ColorToBrushConverter}}" RenderTransformOrigin="0.549,0.429" Margin="1"/>

                </Border>
                <Button Content="Save" Command="{Binding Save}" Margin="165,0,0,4" Grid.Row="1" HorizontalAlignment="Left" Width="60"/>
                <Label Content="Selected pixel color:" HorizontalAlignment="Left" Height="18" Margin="140,11,0,0" VerticalAlignment="Top" Width="110"/>
                <Button Content="Cancel" Command="{Binding Cancel}" Margin="0,1,165,4" HorizontalAlignment="Right" Width="60" RenderTransformOrigin="0.5,0.5" Grid.Row="1">
                </Button>
            </Grid>
        </DockPanel>
    </Grid>
</Window>
</code>

请向我建议解决方案如何将所选颜色传递到视图模型

您应该能够将ImageColorPicker的SelectedColor绑定到ViewModel的属性

因此,在XAML中添加绑定:

SelectedColor="{Binding MySelectedColor, Mode=TwoWay}"
并在VM中添加MySelectedColor属性:

    private Color selectedColor;
    public Color MySelectedColor
    {
        get
        {
            return this.selectedColor;
        }
        set
        {
            this.selectedColor = value;
            OnPropertyChanged("MySelectedColor");
        }
    }

当控件的SelectedColor更改时,它应该自动更新VM中的MySelectedColor。

这并不容易,因为SelectedColor是一个只读的依赖属性
    private Color selectedColor;
    public Color MySelectedColor
    {
        get
        {
            return this.selectedColor;
        }
        set
        {
            this.selectedColor = value;
            OnPropertyChanged("MySelectedColor");
        }
    }