I持っている私のViewModelにバインドされている以下のGridView
WindowsストアアプリのXAML GridViewのレンダリングされていないデータ
XAMLコード:
<GridView SelectionMode="None" ShowsScrollingPlaceholders="False" HorizontalAlignment="Stretch" Margin="2.5 3"
ItemsSource="{Binding ProductList}" Visibility="{Binding IsGridView, Converter={StaticResource BoolToVisibility}}"
SizeChanged="SetListItemsWidth" ScrollViewer.VerticalScrollMode="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Disabled" VerticalAlignment="Stretch">
<GridView.ItemTemplate>
<DataTemplate>
<local:ProductListControl Tag="{Binding id}" Margin="3 0 3 3" Tapped="GotoProduct"/>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
モデル:
public class ProductC1View : INotifyPropertyChanged
{
public string ScreenTitle
{
get { return _ScreenTitle; }
set
{
_ScreenTitle = value;
OnPropertyChanged("ScreenTitle");
}
}
public ObservableCollection<ProductDisplay> ProductList { get; set; }
}
のViewModel:
class ProductC1ViewModel : INotifyPropertyChanged
{
public ProductC1ViewModel()
{
this.View = new ProductC1View();
}
private async void ApplyFilter(object obj)
{
View.ProductList.Clear();
View.IsProductsAvailable = true;
var lstData = await _objController.GetSubCategoryDetails(View);
foreach (var product in lstData.catalogs)
View.ProductList.Add(_objHelper.FormatProductDisplayDetails(product));
}
}
GridView
は、ObservableCollection
にバインドされています。 Intialのロード時や新しいアイテムをコレクションに追加した後は、すべてが正常に動作します。
しかし、データにフィルタを適用してコレクションに新しいアイテムを追加する場合、コレクション内のアイテムをクリアすると、GridView
はデータをレンダリングしません。基礎となるViewModel(ProductList)にはデータが含まれています。私はそれをListViewにバインドすることができ、それは動作します。 Gridviewのためだけにはレンダリングされません
そして、GridviewのItemsPanelをItemsWrapGridからStackPanelに変更すると、その作業はできますが、Stackpanelを使用することはできません。お互いにAmazonのアプリのように。
奇妙なケースは、Windows 8.1の電話アプリでは動作しますが、Windows 10では動作しません。
'GridViewはデータソースにバインドされていますが、XAMLには' ItemsSource'バインディングがないようです。 ViewModelにコードを投稿できますか?特に、バインディングを設定する方法とクリアを行う方法は? –
Visibility = "{Binding IsGridView ..."これまでにない最高のプロパティー名! Martin Zikmund氏はGridViewにバインディングItemsSourceを設定していないと言っていますので、Gridviewのリフレッシュを担当するRaisePropertyChangedを利用することはできません –
@yanyankelevichコードスニペットのバインディングプロパティを忘れています。 VM、およびモデル データセットのリストタイプビューとグリッドタイプビューを切り替えることができます。したがって、プロパティ "IsGridView" – Prince