1

ウォッチリストを次のように定義しました。

// a named list of VariableWatchers
public class WatchList : List<VariableWatcher>
{
    private string _name;

    public WatchList(string name) : base()
    {
        _name = name;
    }

    public override string ToString()
    {
        return _name;
    }
}

次のように、WatchList のリストを ComboBox の ItemsSource プロパティにバインドしました。

<ComboBox x:Name="WatchListDropdown"
          ItemsSource="{Binding Path=WatchLists}"
          VerticalAlignment="Center"
          Margin="5"/>

「WatchLists」は、私の DataContext の次のプロパティを指します。

public IList<WatchList> WatchLists
{
    get { return _watchLists; }
}

リスト内のすべてのエントリが _name 変数ではなく「(コレクション)」として表示されることを除いて、すべてがうまく機能します。ToString にブレークポイントを設定し、ある時点で呼び出され、正しい値を返していることを確認しましたが、どういうわけか ComboBox に "(Collection)" と表示されたままです。

4

3 に答える 3

5

ToString() オーバーライドを使用していない理由がわかりませんが、代わりに DisplayMemberPath を使用することを検討しましたか?

<ComboBox x:Name="WatchListDropdown"
      ItemsSource="{Binding Path=WatchLists}"
      VerticalAlignment="Center"
      DisplayMemberPath="Name"
      Margin="5"/>

もちろん、バインドにはパブリック プロパティまたは依存関係プロパティが必要なため、オブジェクトを調整する必要があります。

private string _name;
public string Name { get { return _name; } set { _name = value; } }
于 2012-10-24T19:41:13.367 に答える
0

WatchLists は WatchList のコレクションですね。したがって、 Collection.ToString() が呼び出されて表示されます。

「name」に DisplayMemberPath を指定してみてはどうでしょうか。私はそれがうまくいくことを願っています:)

于 2012-10-24T19:37:10.123 に答える
0

WatchListItemsSource がタイプの単一の にバインドされている場合、List<VariableWatcher>表示される実際のコレクションは のリストになりVariableWatcherます。

ItemsSource がWatchList.ToString() のコレクションにバインドされている場合、デフォルトの表示をオーバーライドする必要があります。もちろん、いつでもプロパティNameを作成してそれを DisplayMember にすることができます。

于 2012-10-24T19:39:58.270 に答える