使用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 }
错了吗?或者我可以根据自己的喜好混合搭配.xaml
和code 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/