Lets sagen, ich habe eine wirklich grundlegende Klasse mit ein paar Eigenschaften. ZB:Xaml Bindung an benutzerdefinierte Klasse in Xamarin Forms
public class MyClass
{
public MyClass()
{
Something = "Lorem ipsum dolor sit amet, consectetur adipiscing elit";
OrOther = "Proin dignissim, nunc non tincidunt imperdiet, magna urna malesuada enim";
}
public string Something { get; set; }
public string OrOther { get; set; }
}
Und ich möchte dazu in Xaml, wie würde ich das tun?
public partial class MainPage : ContentPage
{
public MyClass anInstance;
public MainPage()
{
InitializeComponent();
anInstance = new MyClass();
BindingContext = this;
}
}
Und dann in meiner XAML: direkt auf das Objekt zu binden, so in meinem XAML-Seite Code hinter Ich habe versucht,
<?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:DataBindingTest"
x:Class="DataBindingTest.MainPage">
<Label Text="{Binding anInstance.Something}"
VerticalOptions="Center"
HorizontalOptions="Center" />
Und ich habe auch versucht Einstellung die Binding auf einer übergeordneten Steuerung:
<?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:DataBindingTest"
x:Class="DataBindingTest.MainPage">
<StackLayout BindingContext="anInstance">
<Label Text="{Binding Something}"
VerticalOptions="Center"
HorizontalOptions="Center" />
</StackLayout>
</ContentPage>
Aber es funktioniert einfach nicht. Ich habe versucht Einstellung auch den Binding der Seite anInstance:
public partial class MainPage : ContentPage
{
public MyClass anInstance;
public MainPage()
{
InitializeComponent();
anInstance = new MyClass();
BindingContext = anInstance;
}
}
Und die Bindung nur, um seine Eigenschaften auf der XAML-Seite:
<?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:DataBindingTest"
x:Class="DataBindingTest.MainPage">
<Label Text="{Binding Something}"
VerticalOptions="Center"
HorizontalOptions="Center" />
</ContentPage>
Aber auch hier alles, was ich bekommen sind leere Seiten. Es scheint, dass mindestens einer von diesen funktionieren sollte. Was ist die empfohlene Methode zum Binden an Eigenschaften in einer benutzerdefinierten Klasse?
bearbeiten
Anbordnahme @ Jason Kommentare, ich habe dies auch versucht:
public MyClass anInstance
{
get
{
return _anInstance;
}
set
{
_anInstance = value;
}
}
private MyClass _anInstance { get; set; }
public MainPage()
{
InitializeComponent();
anInstance = new MyClass();
BindingContext = this;
}
Und die 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:DataBindingTest"
x:Class="DataBindingTest.MainPage">
<StackLayout BindingContext="anInstance">
<Label Text="{Binding Something}"
VerticalOptions="Center"
HorizontalOptions="Center" />
<Label Text="{Binding OrOther}"
VerticalOptions="Center"
HorizontalOptions="Center" />
</StackLayout>
</ContentPage>
Aber wieder eine leere Seite ..
Gleiches Ergebnis mit:
private MyClass anInstance { get; set; }
public MainPage()
{
InitializeComponent();
anInstance = new MyClass();
BindingContext = this;
}
Und
<?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:DataBindingTest"
x:Class="DataBindingTest.MainPage">
<StackLayout BindingContext="anInstance">
<Label Text="{Binding Something}"
VerticalOptions="Center"
HorizontalOptions="Center" />
<Label Text="{Binding OrOther}"
VerticalOptions="Center"
HorizontalOptions="Center" />
</StackLayout>
</ContentPage>
Ihr erstes Beispiel funktioniert nicht, weil "anInstance" keine Eigenschaft ist. Ihr letztes Beispiel sollte funktionieren. – Jason
Kein Code funktioniert. Ihr anInstance-Objekt muss eine Eigenschaft sein. Dies bedeutet, dass es wie folgt deklariert werden muss: public MyClass anInstance {get; einstellen; } '. –
In beiden angehängten Beispielen setzen Sie den BindingContext sowohl in XAML als auch in Code. Wählen Sie oder das andere, nicht beides. Es ist bestenfalls verwirrend. Ich finde es im Allgemeinen klarer, es in den Code dahinter zu setzen. – Jason