Listview 列表视图。检查项目数量并更改可见性
我正在使用MVVM开发一个Winrt应用程序。 我有一个绑定到ObservableCollection的ListViewListview 列表视图。检查项目数量并更改可见性,listview,mvvm-light,observablecollection,winrt-xaml,Listview,Mvvm Light,Observablecollection,Winrt Xaml,我正在使用MVVM开发一个Winrt应用程序。 我有一个绑定到ObservableCollection的ListView <ListView x:Name="TestListView" ItemsSource="{Binding TestItems}" Visibility="{Binding ListVis, Converter={StaticResource BoolToVisibilityConverter}}".../> 我的观察收集: public class S
<ListView x:Name="TestListView" ItemsSource="{Binding TestItems}" Visibility="{Binding ListVis, Converter={StaticResource BoolToVisibilityConverter}}".../>
我的观察收集:
public class SearchResultCollection : ObservableCollection<TestData>, ISupportIncrementalLoading
{
public IAsyncOperation<LoadMoreItemsResult> LoadMoreItemsAsync(uint count)
{
var res = AsyncInfo.Run(async c =>
{
//ask about data from server
return new LoadMoreItemsResult() {Count = PAGE_SIZE};
});
return res;
}
}
公共类SearchResultCollection:ObservableCollection,支持增量加载
{
公共IAsyncOperation LoadMoreItemsAsync(uint计数)
{
var res=AsyncInfo.Run(异步c=>
{
//询问来自服务器的数据
返回新的LoadMoreItemsResult(){Count=PAGE\u SIZE};
});
返回res;
}
}
我还有一个带有链接RelayCommand的文本框(在事件“TextChanged”时执行):
Search=newrelaycommand((e)=>
{
动态发送者=e.发送者;
string text=sender.text;
_searchText=文本;
if(string.IsNullOrEmpty(text))
{
TestItems=null;
返回;
}
ListVis=假;
TestItems=新的SearchResultCollection(\u searchService,文本);
((ObservableCollection)联系人).CollectionChanged+=SearchViewModel\u CollectionChanged;
});
void SearchViewModel_CollectionChanged(对象发送方,NotifyCollectionChangedEventArgs e)
{
if(((ObservableCollection)发送方).Count!=0)
{
ListVis=真;
}
}
我试着做一些类似的事情,但是当ListView get state的可见性崩溃时,CollectionChanged不再被激发。当我删除Visibility属性并检查没有该属性的工作时,CollectionChanged事件会根据需要触发。我建议您代表折叠的可见性尝试将ListView控件的宽度和高度设置为0。您将需要额外的转换器或代码隐藏工作,但可能工作良好。我不能肯定地说,但WinRT可能不会触发一些与性能相关的事件。同样,请注意默认的WinRT绑定是Mode=one-way,而不是two-way。谢谢。我尝试了不透明属性,它可以工作!
Search = new RelayCommand<BehaviorEventArgs>((e) =>
{
dynamic sender = e.Sender;
string text = sender.Text;
_searchText = text;
if (string.IsNullOrEmpty(text))
{
TestItems= null;
return;
}
ListVis = false;
TestItems= new SearchResultCollection(_searchService, text);
((ObservableCollection<TestData>)Contacts).CollectionChanged += SearchViewModel_CollectionChanged;
});
void SearchViewModel_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (((ObservableCollection<Contact>)sender).Count != 0)
{
ListVis = true;
}
}