0

データバインディングは意図したとおりに機能します...私が今直面している本当の問題は、ユーザーコントロールの2つの異なるインスタンスであると私が信じていることですが、実装した元のデバッグリストのみが表示されています。

つまり、データグリッドに技術的にバインドされた2つのリスト、デフォルトのコンストラクターで作成したデフォルトのデバッグリスト、およびデータグリッドにバインドするために作成した実際のリストを作成しています。

データグリッドでユーザーコントロールをクリックするたびに、デフォルトのコンストラクターがデバッグリストに別の行を追加して画面に表示します。

別のユーザーコントロールで選択したオプションのリストを作成するボタンをクリックするたびに、作成していたオプションのリストにオプションが追加され、技術的にはデータグリッドのデータコンテキストに設定されていることがわかります。デフォルトのデバッグリストと同じように、データグリッドのユーザーコントロールに戻ると、デフォルトのコンストラクターが再度実行され、デバッグリストに別の行が追加され、作成中のデバッグリストが表示されます。

これは、問題のデバッグに役立つように追加した数行のクラスのコピーです。

 public partial class QuotePreview : UserControl
{
    private SelectionList _selectionList;
    private SelectionList temp;

    public QuotePreview()
    {
        InitializeComponent();
        _selectionList = (SelectionList)this.DataContext;
    }

    private void QuotePreview_Loaded(object sender, RoutedEventArgs e)
    {

        //Adds item to Debugging list
        _selectionList.SelectedOptions.Add(
            new Selection
            {
                ModelNumber = "this",
                Description = "really",
                Price = "sucks"
            });

    }

    public QuotePreview(SelectionList selectedOptions)
    {

        InitializeComponent();
        _selectionList = (SelectionList)this.DataContext;

        temp = selectedOptions;

        //The list I am actually trying to display
        _selectionList.AddRange(selectedOptions);

        QuotePreview_Loaded();
    }

    private void QuotePreview_Loaded()
    {
        foreach (var options in temp.SelectedOptions)
        {
            _selectionList.SelectedOptions.Add(options);
        }

        QuotePreviewDataGrid.ItemsSource = _selectionList.SelectedOptions;
    }
}

デフォルトのコンストラクターの実装は、ユーザーコントロール/タブがクリックされるたびに呼び出されます。その場合、_selectionListはユーザーコントロールのデータコンテキストに設定され、その後にデータグリッドに行を追加するLoadedイベントが続きます。

データグリッドユーザーコントロールに追加するオプションを選択する別のユーザーコントロールで、追加するオプションのリストを作成するボタンをクリックして、作成したカスタムコンストラクターを呼び出します。コンストラクターが終了すると、たわごとや笑い声のために作成したカスタムのLoaded Eventメソッドが呼び出され、選択したオプションが_selectionListに追加されます。

データグリッドのユーザーコントロールをもう一度クリックすると、デフォルトプロセス全体が実行され、別のデフォルト行が追加されます。

タブに戻って、これらのオプションが再度必要であると言ってデータグリッドに戻ると、再びデフォルトプロセスが実行され、別のデフォルト行が追加されます。

ただし、最も興味深いのは、プロセス間の中間をクリアしないため、両方のselectionListsビルドを確認できることです。表示したいオプションのリストビルドとデフォルトのオプションビルドのリストビルドが表示されます...

また、SelectionListはObservableCollectionを実装します

4

2 に答える 2

0

私はあなたが何を求めているのか正確には従いませんが、ロードが必要なときはいつでもロードされたイベントが発生し、ビューを切り替える場合、TabControlは必要になるまでコンテンツをレンダリングしません!

 bool _isDefaultItemAdded = false
private void QuotePreview_Loaded(object sender, RoutedEventArgs e)
{
    if(!_isDefaultItemAdded)
    {
       //Adds item to Debugging list
         _selectionList.SelectedOptions.Add(
        new Selection
        {
            ModelNumber = "this",
            Description = "really",
            Price = "sucks"
        });
        _isDefaultItemAdded = true;
    }


}
于 2013-02-28T05:44:40.223 に答える