0

プロパティがあり、その状態(AとBなど)に応じて、アニメーションまたは画像のユーザーコントロールを表示します。

ここで、プロパティが変更された場合、データテンプレートセレクターを再度トリガーします。検索したところ、WPFではDataTemplate.Triggerを使用できたのですが、WPでは使用できませんでした。

だから、私の質問は

  • これは、データテンプレートセレクターをトリガーする方法であるため、プロパティが状態AからBに変わると、適切なユーザーコントロールが選択されます。はいの場合、それを実装する方法の例をいくつか挙げてください。

また、状態は2つしかないので、 Converterを使用して可視性を折りたたむことができると思います。基本的なifelseの状況では、2つのコンバーターを作成する必要があります(どういうわけか、1つのコンバーターのみを使用して作成できますか?)正確な状況は次のとおりです。

状態==Aの場合:

userControl_Aを選択します

それ以外の場合:userControl_Bを選択します

また、

  • アニメーションのユーザーコントロールは、折りたたみ状態のときにパフォーマンスに影響しますか?

編集-ちょうど気づいた、私はただ1つのコンバーターを書くためにパラメーターオブジェクトを使うことができます。

4

1 に答える 1

3

ここで説明するようなDataTemplateSelectorを実装できます。
私はそれを使用し、それはかなりうまく機能します。

編集:
プロパティが変更されたときにDataTemplateを更新する必要がある場合は、TemplateSelectorでデータオブジェクトのPropertyChangedイベントをサブスクライブし、SelectTemplateメソッドを再度実行する必要があります。

コードサンプルは次のとおりです。

public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
    City itemAux = item as City;

    // Subscribe to the PropertyChanged event
    itemAux.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(itemAux_PropertyChanged);

    return GetTemplate(itemAux, container);
}

private DataTemplate GetTemplate(City itemAux, DependencyObject container)
{
    if (itemAux != null)
    {
        if (itemAux.Country == "Brazil")
            return BrazilTemplate;
        if (itemAux.Country == "USA")
            return UsaTemplate;
        if (itemAux.Country == "England")
            return EnglandTemplate;
    }

    return base.SelectTemplate(itemAux, container);
}

void itemAux_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
    // A property has changed, we need to reevaluate the template
    this.ContentTemplate = GetTemplate(sender as City, this);
}
于 2012-11-20T07:44:17.080 に答える