0

我有一个奇怪的行为,使用ObjectDataProvider. 我需要绑定一个TextBlockwithToString方法,但是当我输入方法时,我的属性是错误的。

这是我的简单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="&#xf1f8;" FontSize="20" Foreground="Red" HorizontalAlignment="Center" />
                </Button>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

我的方法只是连接两个属性:

public override string ToString()
{
    return StartYear + "/" + EndYear;
}

在调试中,我可以看到开始和结束年份始终为 0。如果我绑定我的TextBlock使用{Binding StartYear}它是正确的并且值为 2019。

问题可能出在哪里?

4

1 回答 1

1

您不需要 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>
于 2019-11-11T15:28:28.423 回答