C#、WPF、.NET Standard、Visual Studio を使用しています。すべての最新またはほぼ最新のバージョン。
これは私の datacontext モデルです (これは ProgrammingManagerAPI と呼ばれる別のライブラリで作成されます):
public class MainModel
{
public List<Project> Projects { get; set; }
...
}
これには、次のように定義されたタイプ Project のオブジェクトのリスト (ディレクトリ Models 内の別のライブラリ ProgrammingManagerAPI にもあります)、いくつかのプロパティ、およびいくつかのメソッドがあります。
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つのオブジェクトを作成している間に、1回ヒットしました。さらに、他のプロパティのようにオブジェクトのすべてのインスタンスに対してではなく、静的関数のようにヒットします。即時ウィンドウで、他のプロパティとは何かを確認しようとしていますが、それらは null です。Id の列がヒットしている間、Project の各インスタンスですべてのプロパティを使用できます。さらに、Id プロパティの getter が呼び出される前にヒットすることがわかりました。
パスなし、バインディングなど、さまざまな方法で多くのバージョンを試しました。
誰でも私の間違いを指摘できますか?