Ich habe die folgende Seite:Xamarin.Forms: Wie wird BindingContext in XAML gesetzt?
<?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>
Und den Code hinter:
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");
}
}
Was ich zu erreichen versuche, ist das Listview an den DevicesList zu binden. Es funktioniert, wenn ich die BindingContext-Zeile im Konstruktor auskommentiere. Ich möchte diese Zeile in die .xaml selbst verschieben. Das Durchsuchen der Angelegenheit führt zu dem Block ContentPage.BindingContext in dem .xaml, aber das stürzt das Programm ab. Es scheint auch der Ansatz zu sein, die Quelle innerhalb der Bindung der ItemsSource der ListView zu setzen, aber ich verstehe die Syntax nicht, um sie in meinem Fall zu bearbeiten (ich bin neu bei Xamarin.Forms und XAML im Allgemeinen). Gibt es eine Möglichkeit, den BindingContext in .xaml zu setzen?
Wenn Sie den BindingContext innerhalb des XAML festlegen, nehme ich an, dass Sie eine StackOverflowException generieren, da der Bindungskontext die ConnectPage ist, sodass viele Instanzen dieser Seite rekursiv generiert werden. Versuchen Sie, diese beiden Konzepte zu teilen: Sie haben die Seite und Sie müssen eine ViewModel-Klasse haben. Das ViewModel muss als BindingContext der Seite festgelegt werden. –