2010-05-04 51 views
0

在带有RIA服务的Silverlight中,使用'FilterDescriptor'实例很容易implement simple data filtering你可以选择启用还是禁用silverlight 4中的FilterDescriptors?

但是我有一个情况,我有几个过滤器,我想要启用或禁用它们基于其他过滤器。

它看起来像一个简单的'启用'属性会使这非常容易 - 但没有。

有没有一种方法可以实现这一点,而无需在每次选中相关复选框时手动定义所需的所有过滤器。也许是一个子类? (我还没有时间自己尝试一下)

+0

(我想知道可能子类化FilterDescriptor并添加一个Enabled属性 - 但我不想打破整体管道,如果它不可能) – 2010-05-04 05:37:38

+0

西蒙,我不知道你是否找到了解决方案?我现在面临与你一样的挑战。 – 2010-06-28 09:19:27

+0

不幸的是我没有找到一个直接的解决方案。没有时间对它进行“学术”,并尝试类似于子类方法。我现在只在一个地方使用filterdescriptors,所以它会有点矫枉过正! – 2010-06-29 15:21:23

回答

2

我这样做是通过将默认值设置为-1,并在FilterDescriptor中设置IgnoredValue =“ - 1”。您也可以使用null或Nothing,具体取决于您使用的语言。 Ken

+0

啊。我在这里不知道的关键是IgnoredValue:http://msdn.microsoft.com/en-us/library/system.windows.controls.filterdescriptor.ignoredvalue(VS.91).aspx – 2010-07-31 00:49:45

1

使用“RIA Services DataFilter Control for Silverlight”,排序/过滤/分组真的很容易。 http://riadatafilter.codeplex.com/

+0

这是一个很酷的控件 - 但是我的情况并不足以让用户创建自己的过滤器。我需要自己定义我的flters – 2010-05-28 19:58:45

0

好的,这就是我所做的。我重新设置过滤器,然后将它们,可以循环通并将其设置为你喜欢的任何东西......

Private Sub AppPickerComboBox_SelectionChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) Handles AppPickerComboBox.SelectionChanged 
    For fd As Integer = AppTranDomainDataSource.FilterDescriptors.Count - 1 To 0 Step -1 
     If AppTranDomainDataSource.FilterDescriptors(fd).PropertyPath = "Application_ID" Then 
      AppTranDomainDataSource.FilterDescriptors.Remove(AppTranDomainDataSource.FilterDescriptors(fd)) 
     End If 
    Next fd 
    AppTranDomainDataSource.FilterDescriptors.Add(New FilterDescriptor With {.PropertyPath = "Application_ID", .Operator = FilterOperator.IsEqualTo, .Value = AppPickerComboBox.SelectedValue, .IgnoredValue = -1}) 
End Sub 
1

使用转换器返回空值或没有一个特定的值(例如)0。然后使用0作为IgnoredValue

相关问题