WPF UserControl 绑定 - OnPropertyChanged 调用函数

WPF UserControl Binding - OnPropertyChanged call Function

晚上好! 我已经阅读了多个关于绑定的线程,并认为我掌握了它(至少对于文本框、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);
    }

如果我使用它,那也行得通 "stand alone"。

但是,如果我尝试在我的 STATUSBOX 中实现它,我将无法使其正常工作... 我希望像这里 [I] 那样做一些事情,一切都完成了,但这不起作用。 在下一种方法中,我尝试在 LAMPCONTROL 中创建一个 DependencyProperty 与 STATUSBOX 中的 DependencyProperty 相同,并在 LAMPCONTROL 的 xaml 中添加一个绑定,从那时起我有点困惑。

问题 - 简而言之 - 是:如何调用子 UserControl 的方法 当 main-UserControl 的绑定 属性 更改时从 main-UserControl?

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

感谢您阅读所有这些,并致以最诚挚的问候

法比安


克莱门斯让我走上了正确的方向。解决方法如下

How to call a method of a sub-UserControl from the main-UserControl when the bound property of the main-UserControl is changed?

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

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

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

subControl.UpdateLightStatus(false);

克莱门斯让我走上了正确的方向。解决方法如下:

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
}