我有以下页面:
<?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?
答案 0 :(得分:1)
你使用的MVVM错了。您正在尝试将viewmodel设置为视图本身。为viewmodel创建一个单独的类,它不应该像你一样从ContentPage派生。