ReactiveUI-我应该使用{Binding}还是这个.绑定(..)



使用ReactiveUI时,可以在xaml中设置绑定。。。

<TextBox x:Name="SomeProperty" Text="{Binding SomeProperty}" />

或在后面的代码中

this.Bind(ViewModel, vm.SomeProperty, v => v.SomeProperty.Text);

在某些情况下(例如绑定到ListBox中的子对象),使用.xaml选项似乎是实现的唯一方法

例如

<ListView>
    <ListView.ItemTemplate>
        <DataTemplate DataType="ListViewItem">
            <TextBox Text="{Binding ChildViewModelProperty}" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

我使用{Binding }错了吗?或者我可以根据自己的喜好混合搭配.xamlcode behind

我认为您可能(几乎)不使用XAML绑定,但需要额外编写代码。我将以Anaïs Betts的XamarinEvolve2014演示为例。

首先,您需要为列表中的项目定义ViewModel(类似于LoginTeamTileViewModel):

public class TileViewModel : ReactiveObject
{
    string name;
    public string Name {
        get { return name; }
        set { this.RaiseAndSetIfChanged(ref name, value); }
    }
}

然后,您需要在ViewModel中公开这些类的集合,例如作为ReactiveList:

public class ViewModel : ReactiveObject
{
    public ReactiveList<TileViewModel> Tiles { get; private set; }
}

可以使用ReactiveDerivedCollection从模型中创建这些ViewModels。

接下来,为TileViewModel创建一个简单的视图,类似于Evolve示例中的视图。

最后,您应该使用创建的视图作为列表视图中的数据模板,如示例所示。请注意,它仍然使用{Binding},但仅用于ViewModel属性,而不用于单独的字段,这似乎更干净。(遗憾的是,我已经有一段时间没有写任何WPF了,所以我将无法在这里快速写任何示例-欢迎编辑!)。

在代码隐藏中,您应该将集合绑定到ListView的ItemsSource,如下所示:

this.OneWayBind(ViewModel, vm => vm.Tiles, v => v.ListView.ItemsSource);

希望这能有所帮助!

不,使用Binding…没有错。。。。如果你想"掌握"WPF\XAML,那么就坚持MVVM模式(绑定),我的意思是坚持它……如果你"混合匹配.XAML和代码隐藏",你最终会得到无法维护、无法管理的意大利面条代码。。。。

听起来你已经掌握了"绑定",你的挑战应该是编写一个WPF应用程序,除了Visual Studio创建的代码之外,绝对不需要任何代码。。。

就我个人而言,我拒绝使用不遵循MVVM模式的WPF应用程序,这告诉我,原来的开发人员并不在意编写其他开发人员(甚至他们自己)可以工作的代码。。。。。

你可能会发现这个链接很有用。。。

https://rachel53461.wordpress.com/category/mvvm/

离子

放置在Window\UserControl*.cs文件中的任何代码都会破坏MVVM模式,但自定义控件除外,在自定义控件中,您将使用DependencyProperty在属性编辑器中公开属性(在设计时)。。。

例如,您应该使用实现ICommand的RelayCommand(或DelegateCommand),而不是事件处理程序。也就是说,永远不要简单地双击按钮在Window(不是MVVM)的*.cs文件中创建事件存根,在ViewModel中创建命令,它应该是一个单独的文件(而不是从Window继承的Window.cs文件coz,这是错误的,因为它是继承UserControl的UserControl)。您的ViewModel需要实现InotifyPropertyChanged,或者继承实现InotityPropertyChanged的ViewModelBase,然后您也应该使用按钮的Command和CommandParameter来绑定,并调用\将对象传递回ViewModel,即MVVM

你可能会发现这很有用。。。

http://www.c-sharpcorner.com/UploadFile/raj1979/simple-mvvm-pattern-in-wpf/

相关内容

  • 没有找到相关文章

最新更新