我有一个绑定到ViewModel集合的视图中的DataGrid,该DataGrid中的某些列绑定到接口属性,因为该对象使用接口的默认实现来实现这些属性。
下面是接口和类的简化:
namespace Interfaces
{
public interface IExampleInterface
{
public object ExampleProperty1 { get; }
public object ExampleProperty2 { get; }
public object ExampleProperty3
{
// Returns value calculated using ExampleProperty1 & ExampleProperty2.
}
}
}
namespace Models
{
public class ExampleObject : Interfaces.IExampleInterface
{
public object ExampleProperty1 { get; set; }
public object ExampleProperty2 { get; set; }
}
}
集合定义为:
public List<ExampleObject> Objects
{
get
{
return _objects;
}
set
{
_objects = value;
// Raises the PropertyChanged event for the property.
}
}
下面是一个xaml的例子:
<DataGrid ItemsSource="{Binding Objects}">
<DataGrid.Columns>
<!--Other Columns-->
<DataGridTextColumn Binding="{Binding Path=(interfaceNamespace:IExampleInterface.ExampleProperty3)}" />
<!--Other Columns-->
</DataGrid.Columns>
</DataGrid>
问题是,每当用户选择这些接口属性绑定列之一的标头作为DataGrid的排序依据时,DataGrid不会排序,并且Visual Studio的“输出”窗口显示以下错误:
系统.Windows.数据错误:40:BindingExpression路径错误:在“object”“ExampleObject”(HashCode=6249895)上未找到“(0)”属性。null
是否有一种方法允许用户按其内容绑定到接口属性的列对DataGrid进行排序?
我尝试将集合的类型更改为ObservableCollection
,认为问题可能是属性排序后视图没有得到通知,但没有骰子。
我还使用接口默认实现的副本实现了类中的属性。这种方法确实有效,但却违背了为接口提供默认实现的目的,这就是为什么我希望有另一种更好的方法来实现这一点。
1条答案
按热度按时间thtygnil1#
尝试设置列的
SortMemberPath
属性: