首页 > 解决方案 > 为什么我的 UserControl 中的 TwoWay 绑定只能使用 OneWay?

问题描述

我有一个非常简单的切换式用户控件。只是矩形中的一个圆圈:

    <Grid MouseLeftButtonDown="Grid_MouseLeftButtonDown">
        <Rectangle x:Name="Body" Width="100" Height="50"  RadiusY="25" RadiusX="25" Fill="DarkGray"/>
        <Ellipse x:Name="Nipple" Width="46" Height="46" HorizontalAlignment="Center" VerticalAlignment="Center" Fill="DimGray" Margin="-50,0,0,0"/>
    </Grid>

...具有单个 DependencyProperty “IsOnProperty”

public static readonly DependencyProperty IsOnProperty = DependencyProperty.Register("IsOn", typeof(bool), typeof(MyToggleSwitch),
        new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
    
    public bool IsOn
    {
        get { return (bool)GetValue(IsOnProperty); }
        set
        {
            SetValue(IsOnProperty, value);
            if (value)
            {
                Nipple.Margin = Offset_Right;
            }
            else
            {
                Nipple.Margin = Offset_Left;
            }
        }
    }
    

在我的 MainWindow 中,我有一个属性“IsOn”...

bool _ison;
public bool IsOn
{ 
    get
    {
        return _ison;
    }
    set
    {
        _ison = value;
        OnPropertyChanged("IsOn");
    }
}

...我可以将我的 DependencyProperty 数据绑定到该值:

    <StackPanel>
        <local:MyToggleSwitch x:Name="Toggle" IsOn="{Binding IsOn, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
    </StackPanel>

现在我可以愉快地单击控件并惊奇地观察“乳头”是如何翻转的,以及底层的 DependecyProperty 是如何来回变化的。惊人的!

这就是奇怪的地方:在我的 UserControl 中,我做了数据绑定 TwoWay...

IsOn="{Binding IsOn, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"

...但是如果底层布尔从代码中的其他地方发生变化,它不会将该更改传播回我的 UserControl。

我的 DependencyProperty 有问题吗?

标签: wpfdata-bindinguser-controlsdependency-properties

解决方案


推荐阅读