边框背景绑定只能工作一次

时间:2015-11-15 17:30:34

标签: c# wpf mvvm

我有一个带有背景的边框,该背景绑定到我的ViewModel中的color属性。但是初始化后背景只会改变一次颜色。与此同时,我有3个文本框绑定到同一属性(R,G和B),它们工作正常。

为什么文本框工作正常并且没有边框?这是边境代码:

<Border x:Name="bNewColor" BorderBrush="Black" >
    <Border.Background>
        <SolidColorBrush Color="{Binding NewColor}"/>
    </Border.Background>    
</Border>

文本框:

<Ellipse x:Name="eMarker" Margin="{Binding MarkerMargin, Mode=TwoWay}" Width="6" Height="6"/>
<TextBox x:Name="tbColorR" TextWrapping="Wrap" Text="{Binding NewColor.R}"/>

VM:

class ViewModel
{
    Palette _palette
    Thickness _markerMargin;

    public Thickness MarkerMargin
    {
        get { return _markerMargin; }
        set
        {
            _markerMargin = value;
            _palette.DeterminateColorInPoint((int)_markerMargin.Left, (int)_markerMargin.Top);
            OnPropertyChanged();
        }
    }

    public ViewModel()
    {
        _palette = new Palette();
    }

...
}

调色板类:

class Palette
{
   Color[,] _paletteColors;
   Color _newColor;
   public Color NewColor
   {
       get { return _newColor; }
       set
       {
           _newColor = value;
           OnPropertyChanged();
       }
   }

    public void DeterminateColorInPoint(int x, int y)
    {
        _newColor = _paletteColors[x, y];
    }

...
}

1 个答案:

答案 0 :(得分:1)

正如我所看到的,您的DeterminateColorInPoint(int x,int y)方法不会引发 NewColor属性的OnPropertyChanged(),因此XAML永远不会知道NewColor已被更改。您必须直接更改NewColor,而不是像cat /var/log/nginx/nginx.log 这样的支持字段。

让我知道我是否得到了帮助。 的问候,