c# - 当 WPF 中 ViewModel 的子属性更改时如何更新绑定
问题描述
我有好几次这个问题,但从来没有想出如何正确解决它。
我有一个对象,SensorOrientation
它由一个浮点数和一个布尔值组成:
public class SensorOrientation{
public float? RadialAngle {
get{
//Getting from backingField
}
set{
//Setting the backingField
//Notifying
}
}
public bool IsAxial {
get{
//Getting from backingField
}
set{
//Setting the backingField
//Notifying
}
}
}
在我的 ViewModel 中,我有一个SensorOrientation
属性和另一个属性,这是一个基本 ViewModel(我有一个有 9 个位置的图表,我必须选择最接近 RadialAngle 中的自定义值的那个) .
所以我创建了一个枚举:
public enum OrientationEditorDirection
{
Unknown,
Center,
Top,
TopRight,
Right,
BottomRight,
Bottom,
BottomLeft,
Left,
TopLeft
}
所以在我的 ViewModel 中,我想在“RadialAngle”或“IsAxial”的值发生变化时更新它:
public class ViewModel{
public SensorOrientation Orientation {
get{
//Getting from backingField
}
set{
//Setting the backingField
//Notifying
}
}
public OrientationEditorDirection Direction {
get=> CallToTheMethodThatComputeTheCorrectDirection();
set => CallToTheMethodThatUpdateTheSensorOrientationValue(value);
}
}
在这个 ViewModel 的 xaml 中,我有 2 个不同的子控件,一个显示方向,一个是自定义字段,用于编辑 ? Orientation.RadialAngle
(当这个人点击Center
(等于 Axial)时,自定义文本框被隐藏)。
<local:OrientationEditor SelectedDirection="{Binding Direction}" />
<angleEditor:AngleEditor Angle="{Binding Orientation.Angle }"/>
问题是,由于 myAngleEditor
是绑定的(并且必须绑定,它在其他情况下使用),在子子属性上,我看不到何时可以提高为方向更改的属性。
到目前为止,我能做的最好的事情是在我的 ViewModel 中,当我设置一个新的“方向”时,我PropertyChanged
手动注册事件,当发生变化时我更新方向。但我觉得这很丑,不是很 WPFish。
知道我怎样才能做得更好吗?
解决方案
推荐阅读
- c - 大型数据集的高效输出格式?
- ios - Xcode 11 - 产品/存档卡在通知扩展上
- python-2.7 - 按钮总是返回最后一个 ID,而不是正确的
- sql - Oracle SQL UPDATE SELECT with JOIN 出错
- c - sh 脚本的优先级是否低于由 linux 中的脚本创建的实时进程?
- r - 使用 xlim() 和 facet_wrap(..., scales="free_y" ) 的意外情节
- c# - 在 C# 中验证分离的 pgp 签名
- oracle - 存储过程不在 100 000 行的 for 循环内运行
- python - 堆积条形图在边缘被切断
- php - Yii2:我应该先将相关模型存储在单独的变量中吗?