我正在使用 C#、WPF、.NET Standard、Visual Studio。所有最新或几乎最新的版本。
这是我的数据上下文模型(在名为 ProgrammingManagerAPI 的独立库中创建):
public class MainModel
{
public List<Project> Projects { get; set; }
...
}
它具有像这样定义的 Project 类型的对象列表(也在单独的库 ProgrammingManagerAPI 中,在目录 Models 中),一些属性和一些方法:
public class Project
{
public int Id { get; set; }
...
public TimeSpan? TotalWorkedTime(bool subtasksIncluded = true)
{
if (Id < 0)
return null;
else
return new TimeSpan(...);
}
...
}
在 mainWindow 中,我有一个 ListView,我想用它来列出项目及其属性。
我有很多属性和一些方法,它们根据布尔参数返回值。
我读到在这种情况下我应该使用 ObjectDataProvider,所以我尝试如下:
xmlns:s="clr-namespace:System;assembly=mscorlib"
xmlns:API.Models="clr-namespace:ProgrammingManagerAPI.Models;assembly=ProgrammingManagerAPI"
<Window.Resources>
<ObjectDataProvider x:Key="yourStaticData"
ObjectType="{x:Type API.Models:Project}"
MethodName="TotalWorkedTime" >
<ObjectDataProvider.MethodParameters>
<s:Boolean>false</s:Boolean>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
<Grid Grid.Row="1" Grid.Column="0" Margin="10">
<ListView Margin="10" ItemsSource="{Binding Projects}" HorizontalAlignment="Center" HorizontalContentAlignment="Center">
<ListView.View>
<GridView>
<GridViewColumn HeaderContainerStyle="{StaticResource ListViewStyle}" Header="Id" DisplayMemberBinding="{Binding Id}" />
<GridViewColumn HeaderContainerStyle="{StaticResource ListViewStyle}" Header="TotalWorkedTime" DisplayMemberBinding="{Binding Path=., Source={StaticResource yourStaticData}}" />
</GridView>
</ListView.View>
</ListView>
</Grid>
对函数 TotalWorkedTime的调用被触发,因为断点被命中。但是被击中一次,而我已经创建了 4 个对象进行测试。此外,它像静态函数一样被命中,而不是像其他属性一样针对对象的每个实例。在即时窗口中,我试图查看其他属性是什么,那些是空值。当 Id 列被击中时,所有属性都可用于每个 Project 实例。此外,我观察到它在调用 Id 属性 getter 之前被击中。
我已经尝试了很多版本,比如没有路径、绑定和许多其他方式。
谁能指出我的错误?