Listview 列表视图。检查项目数量并更改可见性

Listview 列表视图。检查项目数量并更改可见性,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

我正在使用MVVM开发一个Winrt应用程序。 我有一个绑定到ObservableCollection的ListView

 <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;
            }

        }