wpf - 为什么我的 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 有问题吗?
解决方案
推荐阅读
- scala - 在 emacs 中使用 sbt 编译失败
- ios - iOS状态栏内的蓝牙图标
- java - RxJava 2 的 onErrorInsertItem?高级 rx 缓存逻辑
- azure - 无法在 Windows azure 上运行控制台应用程序
- c# - 如何确定在标准 MS DI 中实现接口 X 的服务?
- php - PHP 和 Mysql 没有回显我的变量
- javascript - 带有.map的索引数组在nodejs上不起作用
- amazon-web-services - 从 ec2 实例到其自己的公共 ip 的 aws 访问
- python - AttributeError:模块“tensorflow.python.keras”没有属性“模型”
- android - 图表中两个系列/折线图的交点