私はいくつかのプロパティを持つ本当に基本的なクラスを持っていると言います。例:XamlはXamarinフォームのカスタムクラスにバインドします
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; }
}
これをXamlでデータバインドするにはどうすればよいですか。 私は後ろの私のXAMLページのコードでは、オブジェクトに直接結合しようとしました:私のXAMLで
public partial class MainPage : ContentPage
{
public MyClass anInstance;
public MainPage()
{
InitializeComponent();
anInstance = new MyClass();
BindingContext = this;
}
}
そして:
<?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" />
そして、私はまた、設定しようとしました親コントロール上のBindingContext:
<?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>
ただし、それは機能しません。
public partial class MainPage : ContentPage
{
public MyClass anInstance;
public MainPage()
{
InitializeComponent();
anInstance = new MyClass();
BindingContext = anInstance;
}
}
、ちょうどXAML側でそのプロパティへの結合::私はまたanInstanceにページのBindingContextを設定しようとしました
<?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>
しかし、再び、私が得るすべては空白のページです。 少なくとも1つはうまくいくようです。 このようなカスタムクラスのプロパティにバインドするには、どのような方法が推奨されますか?
編集
コメント@jasonボードに取って、私はまた、これを試してみた:
public MyClass anInstance
{
get
{
return _anInstance;
}
set
{
_anInstance = value;
}
}
private MyClass _anInstance { get; set; }
public MainPage()
{
InitializeComponent();
anInstance = new MyClass();
BindingContext = this;
}
と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>
しかし、再び空白のページ..
同じ結果:
private MyClass anInstance { get; set; }
public MainPage()
{
InitializeComponent();
anInstance = new MyClass();
BindingContext = this;
}
そして
<?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>
"anInstance"はプロパティではないため、最初の例は機能しません。あなたの最後の例がうまくいくはずです。 – Jason
いずれのコードも表示されません。 anInstanceオブジェクトはプロパティでなければなりません。これは 'public MyClass anInstance {get;}のように宣言されなければならないことを意味します。セット; } '。両方の追加例で –
を使用している場合は、XAMLとコードの両方にBindingContextを設定しています。どちらか一方だけを選択してください。それは最高に混乱しています。私は一般的に、コードの背後にそれを設定することを明確にしています。 – Jason