2017-05-24 9 views
0

私はモデルがこのようdfinedていますWPFでListViewに 'some'リストアイテムのみをバインドする方法はありますか?

class MyImage 
{ 
    public string imagePath {get; set;} 
    public bool isIncluded {get; set;} 
} 

と、これらのモデルを保持するリスト:今

public List<MyImage> myImages {get; set;} 

、私はListViewに、このリスト全体をバインドする方法を知っているが、私は何をしたいです'isIncluded'プロパティがtrueに設定されているモデルの画像のみを表示することがListViewです。

私の現在の解決策は、含まれているものだけをコピーする別のList<MyImages>を持っていますが、もっと良い解決策があるかどうかは疑問でした。

+0

あなたは[ 'ListCollectionView'](httpsを探しています://ドキュメント。 microsoft.com/en-us/dotnet/api/system.windows.data.listcollectionview?view=netframework-4.7)およびフィルタを参照してください。 – Rabban

答えて

1

あなたは、単にDataTriggerItemContainerStyleを定義することで、ビューのListViewで除外すべき項目を隠すことができます:

<ListView ...> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding isIncluded}" Value="False"> 
        <Setter Property="Visibility" Value="Collapsed" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ListView.ItemContainerStyle> 
</ListView> 
0

は、私はあなたが別のリストを避けることができるとは思わない非常にシンプルな

public ICollectionView SupportedDevices 
    { 
     get 
     { 
      if (Data != null) 
      { 
       return CollectionViewSource.GetDefaultView(Data); 
      } 
      else 
       return null; 
     } 
    } 

    private string _searchedText = string.Empty; 
    public string SearchedText 
    { 
     get { return _searchedText; } 
     set 
     { 
      _searchedText = value; 

      SupportedDevices.Filter = delegate(object obj) 
      { 
       if (string.IsNullOrEmpty(_searchedText)) 
        return true; 

       DeviceInfo data = obj as DeviceInfo; 
       if (data == null) 
        return false; 

       return (
        (data.Manufacturer.IndexOf(_searchedText, 0, StringComparison.InvariantCultureIgnoreCase) > -1) || 
        data.Model.IndexOf(_searchedText, 0, StringComparison.InvariantCultureIgnoreCase) > -1 
        ); 
      }; 
     } 
    } 
0

... CollectionViewを使用してフィルタを適用します。別のより複雑なアプローチがCollectionViewSourceかもしれない

public List<MyImage> MyImages => myImages.Where(i => i.IsIncluded).ToList();

:よりエレガントな解決策は、プロパティのLINQクエリであるかもしれません。

関連する問題