5

私は (比較的) 経験豊富な Cocoa/Objective-C コーダーであり、C# と WPF フレームワークを独学しています。

Cocoa では、 を設定するときNSTableViewに、デリゲートとデータソースをビューに割り当てるのは比較的簡単です。次に、これらのデリゲート/データソース メソッドを使用して、テーブルにデータを入力し、その動作を決定します。

オブジェクトのリストを持つ単純なアプリケーションをまとめています。それらをDogオブジェクトと呼びましょう。それぞれにpublic string name. の戻り値ですDog.ToString()

オブジェクトは に表示されますListBox。Cocoa の と同様のパターンを使用して、このビューに入力したいと思いNSTableViewDataSourceます。現在、以下を使用して動作しているようです:

public partial class MainWindow : Window, IEnumerable<Dog>
    {
        public Pound pound = new Pound();

        public MainWindow()
        {
            InitializeComponent();

            Dog fido = new Dog();
            fido.name = "Fido";
            pound.AddDog(fido);

            listBox1.ItemsSource = this;

            Dog spot = new Dog();
            spot.name = "Spot";
            pound.AddDog(spot);
        }

        public IEnumerator<Dog> GetEnumerator()
        {
            return currentContext.subjects.GetEnumerator();
        }

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }

しかし、私はこれがどこまで正しいのか疑問に思っています。私が Visual Studio をインストールしてから 1 時間も経っていないので、自分が何をしているのかまったくわからないと言っても過言ではありません。

  1. これは正しいパターンですか?
  2. リスト ( ) に 2 番目の項目を追加するとspot、適切に更新されるように見えListBoxますが、何が更新をトリガーするのでしょうか?
  3. Poundバックグラウンド スレッドでを更新するとどうなりますか?
  4. ListBoxに自分自身を更新するように手動で依頼するにはどうすればよいですか? (私もする必要がありますか?)

行う必要があるとわかっている変更の 1 つIEnumerable<Dog>は、実装を独自のクラスにリファクタリングするDogListItemsSourceことです。

コメントで、大小を問わず、私が対処または心に留めておくべきその他のポイントを自由に指摘してください. 私はこれを正しい方法で初めて学びたいと思います。

4

2 に答える 2

1
  1. WPF では、通常、アイテムを表示するためのItemsSource とデータ テンプレートとしてのコレクションがあります。

  2. 通常、これらのコントロールは、ItemsSource インスタンスが を実装している場合にのみ更新されます。取得するINotifyCollectionChanged前に項目を追加した可能性があります。ListBox

  3. ポンドとは?たとえば、Pound に何らかのスレッド アフィニティがない限りObservableCollectionそれは問題ありません。

  4. ListBox.Items.Refresh()それを行うこともできますが、通常は通知付きのコレクションを使用するだけです。

WPF はデータ バインディングを頻繁に使用するため、フレームワークを学習したい場合は、それぞれの概要(他のすべての概要とともに) が興味深いかもしれません。

于 2011-11-29T22:36:02.803 に答える