2

現在のプロジェクトでは、データバインディングにほとんど問題はありません。ListBoxにバインドしたいObservableCollectionがあります。

public ObservableCollection<GeoDataContainer> geoList = new ObservableCollection<GeoDataContainer>();

...後で...

geoListBox.ItemsSource = geoList;

このコードは正常に機能します。リストボックスにはデータテンプレートがあり、すべてが完璧に見えます。

しかし、バインディングにC#コードを使用したくありません。XAMLコードでバインディングを作成したいと思います。日を探していますが、わかりません。これらは2行のC#コードですが、これをXAMLでアーカイブするには、コレクション用に独自のクラスを作成するか、DataProviderやリソースなどを追加する必要があります。

それを行う簡単な方法はありませんか?

4

3 に答える 3

4

コレクションを公開してバインドするだけです。たとえば、次のように公開する場合:

public ICollection<GeoDataContainer> GeoList
{
    get { return geoList; }
}

次のようにバインドできます。

<ListBox ItemsSource="{Binding GeoList}"/>

「トリック」は、 がプロパティを公開するクラスであるDataContextことを確認することです。ListBoxGeoList

于 2009-02-24T15:24:16.060 に答える
1

もう1つの良い方法は、geoListをリソースとしてインスタンス化することです。

<WindowResources>
  <l:GeoCollection x:Key="geoList"/>
</WindowResources>

その後、あなたは持っています

GeoCollection geoList = FindResource("geoList") as GeoCollection;

もちろん、これはデータがビューのみに関連している場合です。これがモデルまたはモデルビューに関連している場合は、DataContextを使用して、そのプロパティにバインドします。

于 2009-02-24T19:06:08.803 に答える
0

ケントの提案は行く方法です...

さらに、DataContext をリストに設定したくない場合は、別の形式のバインディングでプロパティを取得することもできます。

ルート コントロールに「Root」などの名前があることを確認します。

{Binding ElementName=Root, Path=GeoList}
于 2009-02-24T16:02:47.400 に答える