WPF UserControl绑定 - OnPropertyChanged调用函数

时间:2018-01-29 17:24:06

标签: c# wpf data-binding user-controls propertychanged

晚上好! 我已阅读有关绑定的多个线程,并认为我得到了它的悬念(至少对于textBoxes,ObservableCollections等)。 然而,现在,我有一个更复杂的问题,并在某处迷路了:

我创建了一个UserControl(STATUSBOX),包含标签等。 我绑定了这样的标签:

 <Label x:Name="c1" x:FieldModifier="private" Grid.Column="1" 
    Grid.Row="1" Height="20" Style="{StaticResource labelTable}" 
    Width="140" Content="{Binding Path= value1}" Margin="0,0,0,0" ></Label>

在后面的代码中,我实现了它:

public String value1
    {
        get { return (String)GetValue(ValueProperty1); }
        set {
                SetValue(ValueProperty1, value); 
                //setLightColor(1, value); //[I]
            }
    }
    public static readonly DependencyProperty ValueProperty1 =
        DependencyProperty.Register("value1", typeof(string),
          typeof(UC_StatusBox_detailed), new PropertyMetadata(null));

这很好用。

然而,现在,我尝试添加一个状态指示灯,在绿色 - 红色 - 红色之间切换。因此,我创建了一个新的UserControl(LAMPCONTROL),它显示了精灵图像的一部分:

<Border x:Name="frame" x:FieldModifier="private" Width="30" Height="30" Grid.Column="0" 
    Grid.Row="0" CornerRadius="4" BorderThickness="1">
    <Rectangle Height="30" Width="30" Grid.Column="0" 
        HorizontalAlignment="Right" VerticalAlignment="Center">
            <Rectangle.Fill>
                <ImageBrush x:Name="imgBrush" x:FieldModifier="private" ViewboxUnits="Absolute" Viewbox="0,0, 30,30" ImageSource="/TestControl;component/Icons/spriteLight.png"/>
            </Rectangle.Fill>
    </Rectangle>            
</Border>

我添加了以下方法:

private void UpdateLightStatus(Boolean statusOK)
    {
        int offset;         
        if (statusOK)
        {
            offset = 0;
        }
        else
        {
            offset = 30;
        }
        this.imgBrush.Viewbox = new Rect(offset, 0, 30, 30);
    }

如果我使用它并且#34;独立并且#34;这也有效。

但是,如果我尝试在我的STATUSBOX中实现这一点,我很难让它工作...... 我希望能做类似这里的事情[I]并且一切都已完成,但这不起作用。 在下一个方法中,我尝试在LAMPCONTROL中创建一个等于STATUSBOX中的DependencyProperty,并在LAMPCONTROL的xaml中添加一个绑定,从那里我有点困惑。

问题 - 简而言之 - 将是:如何调用子UserControl的方法 当main-UserControl的bound属性发生变化时,来自main-UserControl?

我希望我的问题有点可以理解,如果需要更多信息,我很乐意提供,但我不想让这个问题比现在更大...... < / p>

感谢您阅读所有这些和最好的问候

费边

克莱门斯让我朝着正确的方向前进。解决方案如下

2 个答案:

答案 0 :(得分:0)

  

如果更改main-UserControl的bound属性,如何从main-UserControl调用子UserControl的方法?

你可以在主控件的XAML标记中给子控件x:Name

<local:LampControl x:Name="subControl" />

然后,您可以在主控件的代码隐藏中使用此名称访问它:

subControl.UpdateLightStatus(false);

答案 1 :(得分:0)

克莱门斯让我朝着正确的方向前进。解决方案如下:

public static readonly DependencyProperty Value1Property =
    DependencyProperty.Register("Value1", typeof(string),
      typeof(UC_StatusBox_detailed), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender,
          new PropertyChangedCallback(OnValueChanged)));


private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
//my code here
}