2011-01-10 5 views
2

これは意味があると思います。CollectionViewSourceはXAMLではDataBoundできませんが、CodeBehindでは使用できますか?

私は、Windows Phone Databoundアプリケーションテンプレートを使用しているWindows Phone 7アプリを持っています。

ViewModelにバインドされたListBoxをソートする必要があるため、XAMLでCollectionViewSourceを作成し、ListBox ItemSourceをCollectionViewSourceに設定しました。デザイナーではすべてがうまくいき、SampleDataが素晴らしいことが分かります。私はアプリを実行したときただし、例外がスローされます。 LINENUMBER = 33 LinePosition = 31

System.Windows.Markup.XamlParseExceptionは、未処理の メッセージ= AG_E_PARSER_BAD_PROPERTY_VALUE [::33ポジション31行目でしたListBoxの

<CollectionViewSource Source="{Binding Items}" x:Key="ItemsSort" > 
    <CollectionViewSource.SortDescriptions> 
     <compMod:SortDescription PropertyName="Order" Direction="Ascending"/> 
    </CollectionViewSource.SortDescriptions> 
</CollectionViewSource> 

:問題のXAMLはこれです

<Grid> 
    <ListBox x:Name="MainListBox" ItemsSource="{Binding Source={StaticResource ItemsSort}}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 

は今、私はCollectionViewSourceからソース=「{バインディングアイテムを}」を削除し、代わりにコードを経由して、それを設定した場合:

CollectionViewSource itemsView = this.Resources["ItemsSort"] as CollectionViewSource; 
itemsView.Source = App.ViewModel.Items; 

すべてが、実行時に動作しますが、もちろん、私が持っているサンプルデータは表示されません。設計時に。

なぜこのような状況が存在するのか理解できません。設計時にサンプルデータを表示し、XAMLを使用してデータバインディングを構成する柔軟性を得たいと思います。

答えて

-1

他の多くの「ItemsSort」リソースのクライアントがページにあります。それはリソース辞書の何かに拘束力を置くことは、常に私に少しropeyに見えます。

はこれを試してみてください - 私の場合は

<ListBox x:Name="MainListBox"> 
    <ListBox.ItemsSource> 
     <CollectionViewSource Source="{Binding Items}"> 
      <CollectionViewSource.SortDescriptions> 
       <compMod:SortDescription PropertyName="Order" Direction="Ascending"/> 
      </CollectionViewSource.SortDescriptions> 
     </CollectionViewSource> 
    </ListBox.ItemsSource> 
+0

感謝をサポートしていません。私はそれを試み、IDEはCollectionViewSourceはListBox.ItemsSource –

1

私はいつも私のCollectionViewSourceは、ビューモデルのプロパティを行いました。私はあなたのような静的リソースでそれを試したことはありませんでしたが、以下のヒントがあなたを助けるかもしれません。

ListBox ItemsSourceバインディングは、CollectionViewSourceではなくCollectionViewSource.Viewに設定する必要があります。

ビューモデルでこれを試してみてください:

ItemsSort = new CollectionViewSource(); 
ItemsSort.Add(new System.ComponentModel.SortDescription("Order", System.ComponentModel.ListSortDirection.Ascending)); 
ItemsSort.Source = Items; 

(結合パスに.Viewに気づく)あなたのXAMLでこれを試してみてください:

<ListBox x:Name="MainListBox" ItemsSource="{Binding Path={ItemsSort.View}}"> 

編集:上記のヒントがいっぱいのためでしたSilverlight - うまくいけばWindows Phoneでもうまく動作しますが、私はそれを試していません。明確なため

-1

ジャスト:Windowsの携帯電話は、提案のためのCollectionViewSource

http://msdn.microsoft.com/ru-ru/library/system.windows.data.collectionviewsource.sortdescriptions(v=vs.110).aspx

Platforms 
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported) 
+0

で有効ではないと私に言った?私はそれを私の一生使いました。このリンクhttp://www.hanselman.com/blog/CollectionViewSourceIsCrazyUsefulForBindingToFilteredObservableCollectionsOnWindowsPhone8.aspxをチェック –

関連する問題