9

私は Xamarin アプリケーションを書いていますが、クロスできない WPF の違いを見つけました。

Xamarin Forms Labs を使用して Repeater コントロールを取得しています。

DataTemplate を繰り返す Repeater があります。

<DataTemplate>
  <Button Text="{Binding Text}" Command="{Binding CategorySelectedCommand}"  />
</DataTemplate>

しかし、コマンドの実行を userControl Binding Context に移動したいと思います。

通常、WPF では次のようになります。

Command={Binding ElementName=myUserControl, Path=DataContext.CategorySelectedCommand}

ただし、ElementName プロパティはありません。

ボタンの BindingContext を次のように設定できることがわかりました。

BindingContext="{x:Reference myUserControl}"

しかし、Text プロパティをボタンのテキストにバインドできません。

どうすればいいですか?

4

1 に答える 1

14

プロパティを使用してSource、現在の の代わりに使用されるバインディングのソースを指定できますBindingContext。次に、テキストはページのバインド コンテキストから取得され、コマンドは別の場所から取得されます。

Command="{Binding CategorySelectedCommand, Source={x:Static me:SomeStaticClass.YourUserControl}}"

また

Command="{Binding CategorySelectedCommand, Source={DynamicResource yourUserControlKey}}"

また

Command="{Binding CategorySelectedCommand, Source={x:Reference myUserControl}}"

これが完全な例です。一般的な問題は、 の呼び出しINotifyPropertyChangedにプロパティを実装および設定しないことです。InitializeComponent()

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" x:Class="test.MyPage" x:Name="ThePage">
    <Label Text="{Binding TextProp, Source={x:Reference ThePage}" HorizontalOptions="Center" VerticalOptions="CenterAndExpand" />
</ContentPage>

コードビハインド

public partial class MyPage : ContentPage
{
    public MyPage ()
    {
        this.TextProp = "Some Text";
        InitializeComponent ();
    }

    public string TextProp
    {
        get;
        set;
    }
}
于 2015-04-15T14:36:08.047 に答える