Private _searchText As String = "some text" Private Function SearchCondition(node As NodeModel) As Boolean Dim nodeLabel As String = node.Label.ToLower() 'ラベルを文字列と比較します。 Return nodeLabel.Contains(_searchText) End Function
ノード内を検索する場合、検索条件は述語デリゲートによって指定されます。検索の間、 xamNetworkNode コントロールすべてのノードを列挙し、各ノードに関して述語デリゲートを呼び出します。ネットワーク ノードはその基本データが述語デリゲートの条件を満たす場合に、一致と認識され検索結果が返されます。照合結果は、NetworkNodeNode オブジェクトのコレクションとして表されます。
実現手法には述語デリゲートの定義方法に基づいて 2 種類のアプローチがあります。それぞれを以下の個々のサブセクションで説明します。
標準的に定義された述語デリゲートを使用する時、最初に述語デリゲートを作成し (検索条件)、次にそれを使用して検索を実行します。
述語デリゲートの作成。
述語デリゲート検索条件を定義します。
述語デリゲートは一般的パラメーターを受け入れ、論理値を返すメソッドです。
次のメソッドでは NodeModel オブジェクトを受け取り、そのラベルを文字列と比較します。
Visual Basic の場合:
Private _searchText As String = "some text" Private Function SearchCondition(node As NodeModel) As Boolean Dim nodeLabel As String = node.Label.ToLower() 'ラベルを文字列と比較します。 Return nodeLabel.Contains(_searchText) End Function
C# の場合:
private string _searchText = "some text"; private bool SearchCondition(NodeModel node) { string nodeLabel = node.Label.ToLower(); //ラベルを文字列と比較します。 return nodeLabel.Contains(_searchText); }
検索条件メソッドをカプセル化します。
Predicate<T> オブジェクトを作成します。これはステップ 1 で作られた SearchCondition メソッドをカプセル化します。predicate オブジェクトはパラメーターとしてネットワーク ノードの Search メソッドに渡されます。
Visual Basic の場合:
Dim searchCondition As New _ Predicate(Of NodeModel)(AddressOf SearchCondition)
C# の場合:
Predicate searchCondition = new Predicate(SearchCondition);
検索を実行します。
これはショートカットで、述語デリゲートを Search メソッド中に直接定義するラムダ式を使います。
Visual Basic の場合:
Dim searchText As String = "some text" Dim searchResults As IEnumerable(Of NetworkNodeNode) = _ networkNodeInstance.Search(Function(node As NodeModel) _ node.Label.ToLower().Contains(searchText))
C# の場合:
string searchText = "some text"; IEnumerable searchResults = networkNodeInstance.Search ((NodeModel node) => node.Label.ToLower().Contains(searchText));