2017-08-12 13 views
1

カスタムTabbedViewを作成しようとしていますが、CustomTabトラフをxamlページに追加するとバインド可能なプロパティが変更されません。BindablePropertyリストは変更されません

コードで何が間違っていますか?

ありがとうございます。

public static readonly BindableProperty TabsProperty = BindableProperty.Create("Tabs", typeof(List<CustomTab>), typeof(TabbedView), new List<CustomTab>(), BindingMode.Default, null, TabsPropertyChanged, TabsPropertyChanging); 

public List<CustomTab> Tabs 
{ 
    get 
    { 
     return (List<CustomTab>)GetValue(TabsProperty); 
    } 
    set 
    { 
     SetValue(TabsProperty, value); 
     OnPropertyChanged("Tabs"); 
    } 
} 

private static void TabsPropertyChanging(BindableObject bindable, object oldValue, object newValue) 
{ 
} 

private static void TabsPropertyChanged(BindableObject bindable, object oldValue, object newValue) 
{ 
} 

XAML

<pageComponents:TabbedView x:Name="myTabs"> 
    <pageComponents:TabbedView.Tabs> 
     <pageComponents:CustomTab></pageComponents:CustomTab> 
     <pageComponents:CustomTab></pageComponents:CustomTab> 
     <pageComponents:CustomTab></pageComponents:CustomTab> 
    </pageComponents:TabbedView.Tabs> 
</pageComponents:TabbedView> 

答えて

0

2つのこと: まず - あなたが実際にリストを設定するだけでこれだけのゲッターを作成し、それを初期化し、XAMLでそれに追加する必要はありません。 2番目 - リストを監視する必要があるため、何かが追加または削除されたときにビューが更新されます。

これは、あなたが欲しいものを行う必要があります。クレイはあなたを望んでいない示されているように

public static readonly BindableProperty TabsProperty = BindableProperty.Create(
    nameof(Tabs), 
    typeof(IEnumerable), 
    typeof(TabbedView)); 

:このような何かにあなたのBindableProperty定義を変更

public IList<CustomTab> Tabs { get; } = new ObservableCollection<CustomTab>(); 
0

はこれを試してみてくださいコレクションインスタンスを外部から設定する場合は、Propertyを次のように変更します。

public ObservableCollection<CustomTab> Tabs { get; } = new ObservableCollection<CustomTab>(); 

コンストラクタでCollectionChangedを購読し、コレクションが変更されたときにそのメソッドが通知されるようにそのメソッドを使用します(新しいアイテムが追加されました)。

public TabbedView() 
{ 
    Tabs.CollectionChanged += OnTabsChanged; 
} 

あなたのイベントハンドラ

private void OnTabsChanged(object sender, NotifyCollectionChangedEventArgs e) 
{ 
    // Do here what you need to do 
} 

ヒント:

あなたがタグを指定しなくても、XAMLのタブを追加することができContentPropertyTabsとしてプロパティを設定した場合。

[ContentProperty(nameof(Tabs))] 
public partial class TabbedView : ContentView 
{ 
    ... 
} 

次に、あなたのXAMLで、これは十分な

<pageComponents:TabbedView> 
     <pageComponents:CustomTab /> 
     <pageComponents:CustomTab /> 
     <pageComponents:CustomTab /> 
</pageComponents:TabbedView> 

・ホープ、このhelps.-

だろう
関連する問題