在Xamarin.Forms上的XAML中将BindingContext设置为ViewModel

时间:2016-07-24 12:29:25

标签: c# xaml mvvm xamarin.forms binding-context

我想用Xamarin.Form和MVVM开发一个简单的项目。在我的解决方案(名为XamarinPOC)中,我(除了标准的Xamarin.Forms项目)还有一个用于模型的单独项目(XamarinPOC.Model)和一个用于ViewModel的单独项目(XamarinPOC.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定义中,但我没有找到错误。我哪里错了?

1 个答案:

答案 0 :(得分:33)

要将视图绑定到Xaml中的viewmodel,请执行以下操作

<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)放在名为“ViewModel s ”的文件夹中,这样你的命名空间就可以了案例将是XamarinPOC.ViewModel s