我疯狂地试图弄清楚如何从我的ViewModel操作telerik RadGridView for WPF的列过滤。我以为我可能能够将FilterDescriptor的值绑定到ViewModel属性,但是我得到了
无法找到目标元素的管理FrameworkElement或FrameworkContentElement
<telerik:CompositeFilterDescriptor>
<telerik:FilterDescriptor Member="Foo.SomeProperty" Operator="IsContainedIn" Value="{Binding SelectedThings}" />
</telerik:CompositeFilterDescriptor>
其中Foo.SomeProperty是绑定到网格列的VM属性,SelectedThings是一个VM属性,包含要过滤的唯一值的字符串化数组。
GridView绑定到QueryableCollectionView。
我希望过滤在运行时工作,基于VM中的一些自定义逻辑 - 例如。用户单击某个按钮,VM限制其中一列的不同值。
这不应该那么难。我必须接近这个错误。我一直在考虑其他stackoverflow问题,但还没有找到一个有效的解决方案。任何建议将不胜感激。
更新
我仍然希望通过完全MVVM方法实现这一目标,但暂时我决定不再坚持并以下列方式解决问题。
ViewModel的ObservableCollection绑定到表示某些过滤条件的复选框列表,由用户通过GUI更新。
在该属性更改后,ViewModel通过Messenger(MVVMLIGHT)发送消息,该消息在代码隐藏中已注册接收。该消息包括过滤标准信息。
代码隐藏接收它并将其直接应用于GridView。
这有什么好处,它避免了必须连接任何DependencyProperties或其他事件处理程序,并允许VM保持对View实现的无知。这很简单,也很有效。
是的,现在有一些代码,但直到我能找到一些更好的信息,如何通过MVVM绑定完全解决这个问题,这是一个可行的解决方案。
希望我昨天上午9点做到这一点,而不是整天盯着墙壁阅读Telerik蹩脚的文档,并寻找如何以“正确的方式”做到这一点的例子。 MEH。