在 Xamarin.Forms XAML 中将 BindingContext 设置为 ViewModel
Set BindingContext to ViewModel in XAML on Xamarin.Forms
我想用 Xamarin.Form 和 MVVM 开发一个简单的项目。在我的解决方案(名为 XamarinPOC)中,我有(除了标准 Xamarin.Forms 项目)一个单独的模型项目 (XamarinPOC.Model) 和一个单独的 ViewModel 项目 (XamarinPOC.ViewModel)。
我在一个 XamarinPOC.ViewModel 项目中为 BaseViewModel class(实现了 INotifyPropertyChanged 接口)定义了一个抽象 class,在我创建了一个 SummaryViewModel class 之后用简单的 属性:
扩展 BaseViewModel class
namespace XamarinPOC.ViewModel
{
public class SummaryViewModel : BaseViewModel
{
private string _test = "The binding is OK!";
public String test
{
get
{
return _test;
}
set
{
_test = value;
OnPropertyChanged("test");
}
}
public SummaryViewModel(){}
}
}
接下来我在 XamarinPOC 项目中创建了一个简单的 ContentPage (SummatyView),它只包含一个标签,我想显示在 ViewModel 中定义的文本。我想使用 XAML 来定义视图和绑定,但是当我 运行 应用程序没有显示任何内容时,我在编译时和 运行 时间都没有错误,但文本不是显示。我的XAML是这个
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:XamarinPOC.ViewModel,assembly=XamarinPOC.ViewModel"
x:Class="XamarinPOC.Summary"
Title="Summary List"
BindingContext="XamarinPOC.ViewModel.SummaryViewModel">
<StackLayout>
<Label Text="{Binding test}"/>
</StackLayout>
</ContentPage>
最后我的 app.cs 是:
namespace XamarinPOC
{
public class App : Application
{
public App()
{
MainPage = new Summary();
}
}
}
在 XamarinPOC 项目中,我添加了对 XamarinPOC.ViewModel 和 XamarinPOC.Model 程序集的引用。
我认为问题出在绑定的 XAML 定义中,但我没有找到错误。我哪里错了?
在你的情况下,要将视图绑定到 Xaml 的视图模型,请这样做
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:viewModels="clr-namespace:XamarinPOC.ViewModel; assembly=XamarinPOC.ViewModel"
x:Class="XamarinPOC.Summary"
Title="Summary List">
<ContentPage.BindingContext>
<viewModels:SummaryViewModel/>
</ContentPage.BindingContext>
<StackLayout>
<Label Text="{Binding test}"/>
</StackLayout>
</ContentPage>
我注意到的一个旁注是命名约定,最好将所有 ViewModel(即使只有一个 ViewModel)放在名为 "ViewModels" 的文件夹中,因此您的命名空间将是 XamarinPOC.ViewModels
我想用 Xamarin.Form 和 MVVM 开发一个简单的项目。在我的解决方案(名为 XamarinPOC)中,我有(除了标准 Xamarin.Forms 项目)一个单独的模型项目 (XamarinPOC.Model) 和一个单独的 ViewModel 项目 (XamarinPOC.ViewModel)。
我在一个 XamarinPOC.ViewModel 项目中为 BaseViewModel class(实现了 INotifyPropertyChanged 接口)定义了一个抽象 class,在我创建了一个 SummaryViewModel class 之后用简单的 属性:
扩展 BaseViewModel classnamespace XamarinPOC.ViewModel
{
public class SummaryViewModel : BaseViewModel
{
private string _test = "The binding is OK!";
public String test
{
get
{
return _test;
}
set
{
_test = value;
OnPropertyChanged("test");
}
}
public SummaryViewModel(){}
}
}
接下来我在 XamarinPOC 项目中创建了一个简单的 ContentPage (SummatyView),它只包含一个标签,我想显示在 ViewModel 中定义的文本。我想使用 XAML 来定义视图和绑定,但是当我 运行 应用程序没有显示任何内容时,我在编译时和 运行 时间都没有错误,但文本不是显示。我的XAML是这个
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:XamarinPOC.ViewModel,assembly=XamarinPOC.ViewModel"
x:Class="XamarinPOC.Summary"
Title="Summary List"
BindingContext="XamarinPOC.ViewModel.SummaryViewModel">
<StackLayout>
<Label Text="{Binding test}"/>
</StackLayout>
</ContentPage>
最后我的 app.cs 是:
namespace XamarinPOC
{
public class App : Application
{
public App()
{
MainPage = new Summary();
}
}
}
在 XamarinPOC 项目中,我添加了对 XamarinPOC.ViewModel 和 XamarinPOC.Model 程序集的引用。
我认为问题出在绑定的 XAML 定义中,但我没有找到错误。我哪里错了?
在你的情况下,要将视图绑定到 Xaml 的视图模型,请这样做
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:viewModels="clr-namespace:XamarinPOC.ViewModel; assembly=XamarinPOC.ViewModel"
x:Class="XamarinPOC.Summary"
Title="Summary List">
<ContentPage.BindingContext>
<viewModels:SummaryViewModel/>
</ContentPage.BindingContext>
<StackLayout>
<Label Text="{Binding test}"/>
</StackLayout>
</ContentPage>
我注意到的一个旁注是命名约定,最好将所有 ViewModel(即使只有一个 ViewModel)放在名为 "ViewModels" 的文件夹中,因此您的命名空间将是 XamarinPOC.ViewModels