【发布时间】:2020-01-29 18:53:18
【问题描述】:
我有一个非常基本的观点。
<ContentPage x:Class="ThetaRex.InvestmentManager.Merlin.Views.ScenarioSelectionPage"
Title="{Binding Title}"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns="http://xamarin.com/schemas/2014/forms">
<StackLayout>
<ListView ItemsSource="{Binding Items}"/>
</StackLayout>
<ContentPage/>
后面的代码也很简单:
namespace ThetaRex.InvestmentManager.Merlin.Views
{
using System.ComponentModel;
using ThetaRex.InvestmentManager.Merlin.ViewModels;
using Xamarin.Forms;
public partial class ScenarioSelectionPage : ContentPage
{
public ScenarioSelectionPage()
{
InitializeComponent();
this.BindingContext = this.ViewModel = new ScenarioSelectionViewModel();
}
public ScenarioSelectionViewModel ViewModel { get; set; }
protected override void OnAppearing()
{
base.OnAppearing();
ViewModel.LoadItemsCommand.Execute(null);
}
}
}
来自 WPF 和 UWP 中的纯 MVVM 环境,我想将视图绑定到 XAML 中的视图模型,而不是在后面的代码中使用 this.Binding = ViewModel。我试过了:
<ContentPage x:Class="ThetaRex.InvestmentManager.Merlin.Views.ScenarioSelectionPage"
xmlns:controls="clr-namespace:ThetaRex.InvestmentManager.Merlin.Controls"
BindingContext="{Binding ViewModel}"
Title="{Binding Title}"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns="http://xamarin.com/schemas/2014/forms">
但它没有用。如何从 XAML 绑定到 ViewModel?
注意:我知道我可以在 XAML 中从头开始创建视图模型,但它不使用视图后面的代码使用的相同实例,所以这不是一个选项。
【问题讨论】:
-
@sermet - 这不是重复的。见注释。该解决方案创建了一个 View 无法访问的全新 ViewModel。视图要求它必须能够调用其视图模型上的方法。例如,在上面的示例中,在初始化时执行 LoadItemsCommand。
-
var vm = BindingContext as ScenarioSelectionViewModel; vm.LoadItemsCommand.Execute(null);