2017-02-05 13 views
0
を返します

xamarin.formsにユーザーコントロール(ユーザービュー)を作成します。私のcontolには1つのプロパティがあります。コントロールが要素にページに追加する要素を選択します(エントリまたはラベル)。私はBindablePropertyを使用しますが、デフォルト値のみを返します。私は間違ったことを理解していませんか?Bindableプロパティはデフォルト値の

ここに私のユーザーコントロールコード:

public partial class UserView : ContentView 
{ 
    public UserView() 
    { 
     InitializeComponent(); 
     StackLayout stackLayout = new StackLayout(); 
     if (TypeElement == "label")        //TypeElement return only "default value" 
      stackLayout.Children.Add(new Label { Text = "LABEL" }); 
     else 
      stackLayout.Children.Add(new Entry { Text = "ENTRY" }); 

     Content = stackLayout; 
    } 

    public static readonly BindableProperty TypeProperty = BindableProperty.CreateAttached("TypeElement", typeof(string), typeof(UserView), "default value"); 

    public string TypeElement 
    { 
     get 
     { 
      return (string)GetValue(TypeProperty); 
     } 
     set 
     { 
      SetValue(TypeProperty, value); 
     } 
    } 
} 

ここで私はページ上の私のコントロールを使用します。

enter image description here

答えて

1

あなたのTypeElementプロパティは、コンストラクタが完了した後、あなたが見てしなければならない設定なっていますこのプロパティが変更されたときに、次に行う必要な操作を実行します。

public static readonly BindableProperty TypeProperty = BindableProperty.CreateAttached("TypeElement", typeof(string), typeof(UserView), "default value", propertyChanged:OnTypeElementChanged); 

private static void OnTypeElementChanged(BindableObject bindable, object oldValue, object newValue) 
{ 
    var userView = bindable as UserView; 
    StackLayout stackLayout = new StackLayout(); 
    if (userView.TypeElement == "label")        //TypeElement return only "default value" 
     stackLayout.Children.Add(new Label { Text = "LABEL" }); 
    else 
     stackLayout.Children.Add(new Entry { Text = "ENTRY" }); 

    userView.Content = stackLayout; 
} 

私はこれをテストして動作しますが、通常のバインド可能なプロパティの代わりにアタッチされたプロパティを使用する理由、XAMLファイルを持っているように見える理由など、混乱させる実装に関するいくつかのことがありますとにかくコンテンツを置き換える場合は、UserViewに関連付けられています。

+0

ありがとうございました。あなたは私を助けてくれました。 –

+0

私の質問について私は "CountTextBox"、 "CountLabel"とe.t.cのようないくつかのプロパティを持つユーザーコントロールを作成しようとします。このプロパティはXAMLを入力してから複雑なコントロールを取得する必要があります。私の目標 - いくつかの "動的な"コントロール。 –

関連する問題