-2

この平和なコードの変換に問題があります。コンバーターを使用しようとしましたが、まったく運がありません。すべてのコンバーターは、この部分「view.Filter = delegate(object item)」に問題があります。よろしくお願いします。

    private void ApplyFilters()
    {
        // Get the view
        ICollectionView view = CollectionViewSource.GetDefaultView(ItemsSource);
        if (view != null)
        {
            // Create a filter
            view.Filter = delegate(object item)
            {
                // Show the current object
                bool show = true;

                // Loop filters
                foreach (KeyValuePair<string, string> filter in columnFilters)
                {
                    object property = GetPropertyValue(item, filter.Key);
                    if (property != null)
                    {
                        // Check if the current column contains a filter
                        bool containsFilter = false;
                        if (IsFilteringCaseSensitive)
                            containsFilter = property.ToString().Contains(filter.Value);
                        else
                            containsFilter = property.ToString().ToLower().Contains(filter.Value.ToLower());

                        // Do the necessary things if the filter is not correct
                        if (!containsFilter)
                        {
                            show = false;
                            break;
                        }
                    }
                }

                // Return if it's visible or not
                return show;
            };
        }
    }
4

2 に答える 2

1

ラムダ式を使用して、 C# 匿名メソッドを変換できます。

view.Filter = Function(item As Object)
        ' Show the current object
        Dim show As Boolean = True

        ' Loop filters
        For Each filter As KeyValuePair(Of String, String) In columnFilters
            Dim prop As Object = GetPropertyValue(item, filter.Key)
            If prop IsNot Nothing Then
                ' Check if the current column contains a filter
                Dim containsFilter As Boolean = False
                If IsFilteringCaseSensitive Then
                    containsFilter = prop.ToString().Contains(filter.Value)
                Else
                    containsFilter = prop.ToString().ToLower().Contains(filter.Value.ToLower())
                End If

                ' Do the necessary things if the filter is not correct
                If Not containsFilter Then
                    show = False
                    Exit For
                End If
            End If
        Next

        ' Return if it's visible or not
        Return show
      End Function
于 2012-08-24T20:24:09.877 に答える
0

これは、VB.Net が匿名メソッドをサポートしていないためです。

デリゲート コードを別の関数呼び出しに抽出してから、コンバーターを介して実行することができます。

于 2012-08-24T20:26:28.983 に答える