将BindingContext设置为Xamarin上的XAML中的ViewModel
我想用Xamarin.Form和MVVM开发一个简单的项目。在我的解决方案(名为XamarinPOC)中,除了标准的Xamarin.Forms项目外,我还为模型(XamarinPOC.Model)和ViewModel(XamarinPOC.ViewModel)提供了一个单独的项目。将BindingContext设置为Xamarin上的XAML中的ViewModel
我在XamarinPOC.ViewModel项目定义为一个BaseViewModel一种抽象类(实现INotifyPropertyChanged接口),我已经创建了一个扩展BaseViewModel类的简单属性SummaryViewModel课后:
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>
一边注意我注意到的是有命名约定,最好是把所有的的ViewModels,即使是只有一个视图模型,命名文件夹里面的“视图模型小号”所以你的情况的命名空间将XamarinPOC.ViewModel 小号
谢谢你的答复我尝试了你的解决方案,但是该应用在试图解析命名空间时抛出了运行时异常。 assembly = XamarinPOC.ViewModel“' 但您的解决方案将正确的方向,经过其他搜索我已经找到了正确的实施信息: 'xmlns:mvvm =”clr-namespace:XamarinPOC.ViewModel; assembly = XamarinPOC.ViewModel “'与您的解决方案唯一的区别在于xmlns前缀,因为在这种情况下使用** xmlns:local **是错误的,我需要使用另一个前缀(我选择** xmlns:mvvm **) – fabiuz
太棒了!只是修复它 – BraveHeart
您需要分配的BindingContext一个*实例*您的视图模型,而不是类定义本身 – Jason