C# WPF 使用 ObjectDataProvider 绑定到方法
C# WPF binding to method with ObjectDataProvider
我在使用 ObjectDataProvider
时有一个奇怪的行为。我需要用 ToString
方法绑定 TextBlock
但是,当我输入方法时,我的属性是错误的。
这是我的简单ObjectDataProvider
:
<Window.Resources>
<ObjectDataProvider x:Key="ToString" MethodName="ToString" ObjectType="{x:Type entities:Season}" />
</Window.Resources>
这是我的 ListView
:
<ListView Grid.Row="2" Name="lvSeasons" HorizontalContentAlignment="Stretch">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="30" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Source={StaticResource ToString}}" VerticalAlignment="Center" />
<Button Grid.Column="1" VerticalAlignment="Center" Background="Transparent" BorderBrush="Transparent" Click="btDeleteSeason_Click">
<TextBlock FontFamily="{StaticResource FontAwesome}" Text="" FontSize="20" Foreground="Red" HorizontalAlignment="Center" />
</Button>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我的方法简单地连接了两个属性:
public override string ToString()
{
return StartYear + "/" + EndYear;
}
在调试中我可以看到开始和结束年份始终为 0。如果我使用 {Binding StartYear}
绑定我的 TextBlock
它是正确的并且值为 2019。
问题出在哪里?
您不需要 ObjectDataProvider。随便写
<TextBlock Text="{Binding}" ... />
WPF 默认会调用 ToString 方法。
当您使用具有适当 StringFormat 的 MultiBinding 时,您甚至不需要覆盖 ToString:
<TextBlock ...>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}/{1}">
<Binding Path="StartYear "/>
<Binding Path="EndYear "/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
我在使用 ObjectDataProvider
时有一个奇怪的行为。我需要用 ToString
方法绑定 TextBlock
但是,当我输入方法时,我的属性是错误的。
这是我的简单ObjectDataProvider
:
<Window.Resources>
<ObjectDataProvider x:Key="ToString" MethodName="ToString" ObjectType="{x:Type entities:Season}" />
</Window.Resources>
这是我的 ListView
:
<ListView Grid.Row="2" Name="lvSeasons" HorizontalContentAlignment="Stretch">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="30" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Source={StaticResource ToString}}" VerticalAlignment="Center" />
<Button Grid.Column="1" VerticalAlignment="Center" Background="Transparent" BorderBrush="Transparent" Click="btDeleteSeason_Click">
<TextBlock FontFamily="{StaticResource FontAwesome}" Text="" FontSize="20" Foreground="Red" HorizontalAlignment="Center" />
</Button>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我的方法简单地连接了两个属性:
public override string ToString()
{
return StartYear + "/" + EndYear;
}
在调试中我可以看到开始和结束年份始终为 0。如果我使用 {Binding StartYear}
绑定我的 TextBlock
它是正确的并且值为 2019。
问题出在哪里?
您不需要 ObjectDataProvider。随便写
<TextBlock Text="{Binding}" ... />
WPF 默认会调用 ToString 方法。
当您使用具有适当 StringFormat 的 MultiBinding 时,您甚至不需要覆盖 ToString:
<TextBlock ...>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}/{1}">
<Binding Path="StartYear "/>
<Binding Path="EndYear "/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>