【发布时间】:2020-01-23 13:28:27
【问题描述】:
我第一次开始使用 ReactiveUI(带有 WPF)并且遇到了一些我无法通过谷歌搜索或在文档上找到的问题。如何从 Control 的 DependencyProperty 中绑定属性?
我正在创建一个用户控件
public partial class MotorControlView: ReactiveUserControl<MotorControlViewModel>
在类里面我有依赖属性 MotorAxis
public static readonly DependencyProperty MotorAxisProperty = DependencyProperty.Register(
"MotorAxis", typeof(MotorAxis), typeof(MotorControlView));
public MotorAxis MotorAxis
{
get => (MotorAxis) GetValue(MotorAxisProperty);
set => SetValue(MotorAxisProperty, value);
}
在视图内部有 TextBlock,它应该显示 MotorAxis(它是一个枚举)字符串值(NoVal/X/Y/Z)。
属性设置在MainWindow.XAML(<uc:MotorControlView MotorAxis="Y" />)
问题是:
- 如何使用 ReactiveUI 将标签的文本绑定到 MotorAxis 控件的属性?
- 如何将值传递给 ViewModel
在构造函数中,它的值始终是默认值(NoVal),所以我认为我不能将它传递给 viewmodel 构造函数...
ViewModel 将根据这个参数负责访问 X/Y/Z 电机
我发现的唯一解决方案是这样做:
//In View:
public MotorControlView()
{
InitializeComponent();
ViewModel = new MotorControlViewModel();
this.WhenActivated(dr =>
{
ViewModel.MotorAxis = this.MotorAxis;
});
this.Bind(ViewModel, vm => vm.MotorAxis, v => v.MotorAxisBlock.Text);
}
//在虚拟机中:
财产与
this.RaiseAndSetIfChanged(ref this.motorAxis, value)
有没有更优雅的方法来做到这一点,而无需在WhenActivated 中手动设置值?所以我可以在例如访问这个值。 VM的构造函数?
【问题讨论】:
标签: reactiveui