Xamarin.Forms:如何在XAML中设置BindingContext?

时间:2016-08-03 02:52:54

标签: xaml xamarin.forms

我有以下页面:

<?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:pages="clr-namespace:XamFormsBle.Pages;assembly=XamFormsBle"
         x:Name="ContentPageContainer"
         x:Class="XamFormsBle.Pages.ConnectPage">
  <!--This does not work-->
  <ContentPage.BindingContext>
    <pages:ConnectPage/>
  </ContentPage.BindingContext>

  <StackLayout Orientation="Vertical">
    <Button Text="Refresh"
            Clicked="RefreshDevicesList"/>
    <ListView ItemsSource="{Binding DevicesList}"/>
  </StackLayout>
</ContentPage>

背后的代码:

public partial class ConnectPage : ContentPage
{
    public ObservableCollection<string> DevicesList { get; set; }

    public ConnectPage()
    {
        InitializeComponent();
        DevicesList = new ObservableCollection<string>();
        //BindingContext = this;
    }

    public void RefreshDevicesList(object sender, EventArgs e)
    {
        DevicesList.Add("device");
    }
}

我想要实现的是将ListView绑定到DevicesList。当我在构造函数中取消注释BindingContext行时,它可以工作。我想将该行移动到.xaml本身。研究此问题会导致.xaml中的ContentPage.BindingContext块,但会导致程序崩溃。似乎还有在ListView的ItemsSource的绑定中设置Source的方法,但我不理解在我的情况下使用它的语法(我通常是Xamarin.Forms和XAML的新手)。有没有办法在.xaml中设置BindingContext?

1 个答案:

答案 0 :(得分:1)

你使用的MVVM错了。您正在尝试将viewmodel设置为视图本身。为viewmodel创建一个单独的类,它不应该像你一样从ContentPage派生。