2016-07-24 84 views
10

我想用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定义上,但是我没有找到错误。我错在哪里?

+2

您需要分配的BindingContext一个*实例*您的视图模型,而不是类定义本身 – Jason

回答

13

要将视图绑定到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 小号

+0

谢谢你的答复我尝试了你的解决方案,但是该应用在试图解析命名空间时抛出了运行时异常。 assembly = XamarinPOC.ViewModel“' 但您的解决方案将正确的方向,经过其他搜索我已经找到了正确的实施信息: 'xmlns:mvvm =”clr-namespace:XamarinPOC.ViewModel; assembly = XamarinPOC.ViewModel “'与您的解决方案唯一的区别在于xmlns前缀,因为在这种情况下使用** xmlns:local **是错误的,我需要使用另一个前缀(我选择** xmlns:mvvm **) – fabiuz

+0

太棒了!只是修复它 – BraveHeart

相关问题