繁体   English   中英

视图中的WPF ReactiveUI绑定

[英]WPF ReactiveUI bindings in View

我正在使用Rx和ReactiveUI创建一个WPF应用程序。 我是否必须在代码中隐藏视图中的属性绑定或者是经典方式好吗? 我知道View和ViewModel对象之间的绑定,我只是无法弄清楚这些xaml绑定是否应该采用不同的方式。

<Label x:Name="FilterLabel"
   ...
   Width="{Binding ActualWidth, ElementName=TemplateLabel}"
   .../>

这可以,还是有更“亲”的方式?

this.WhenActivated(d => {
    this.OneWayBind(ViewModel, vm => vm.Toolbar,   v => v.ToolbarView.ViewModel).DisposeWith(d);
});

这就是我查看ViewModel - > View绑定的方法

如果您只是将视图属性绑定到Xaml中的另一个属性,那么在这种情况下您可以坚持使用Xaml。 但是肯定坚持View-ViewModel绑定的代码隐藏,保持你的Xaml文件更清洁,你也可以通过使用C#绑定获得类型检查的好处。

XAML绑定适用于简单的用例,但对于更复杂的东西,你应该使用绑定后面的代码,例如,绑定后面的代码为你提供了一个选择器函数,你可以使用这个强大的功能来简化你的ViewModel。

一个小例子:

this.WhenActivated(disposables =>
        {

            this.OneWayBind(ViewModel, vm => vm.UserRole,
                v => v.UserRole.Text, GetAbreviatedRole).DisposeWith(disposables);
        });

在这种情况下,GetAbreviatedRole是一个选择器,结果可以节省您使用值转换器。

private string GetAbreviatedRole(string role)
    {
        if (role.Equals("SuperUser", StringComparison.OrdinalIgnoreCase))
            return "SU";
        if (role.Equals("BuildingManager", StringComparison.OrdinalIgnoreCase))
            return "BM";
        if (role.Equals("OfficeManager", StringComparison.OrdinalIgnoreCase))
            return "OM";
        if (role.Equals("OfficeManagerJunior", StringComparison.OrdinalIgnoreCase))
            return "OMJ";
        if (role.Equals("Usuario", StringComparison.OrdinalIgnoreCase))
            return "U";
        return "unknown";
    }

我希望这可以帮助你。

问候。

对于查看绑定的视图,您可以在View代码隐藏中使用以下语法:

this.WhenAnyValue(x => x.TemplateLabel.ActualWidth)
    .BindTo(this, view => view.FilterLabel.Width)
    .DisposeWith(disposable);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM