UWP ValueConverter with DependencyProperty

三世轮回 提交于 2019-12-06 16:45:15

The problem is that when you use {Binding} in the <Page.Resources> section, the binding will be evaluated then and there, relatively to the Page's DataContext. You can verify this if you set a DataContext = new Vehicle() within the Page's constructor.

To fix this, you can just move the converter inside the DataTemplate declaration:

<DataTemplate>
    <Grid ScrollViewer.VerticalScrollBarVisibility="Auto">
        <Grid.Resources>
            <converters:Item_to_FullItem x:Key="Item_to_FullItem" VehicleItem="{Binding}"/>
        </Grid.Resources>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="40"/>
        </Grid.RowDefinitions>

        <Border Grid.Column="0" BorderThickness="1" BorderBrush="Black">
            <TextBlock Text="{Binding Path=Category}"/>
        </Border>
        <Border Grid.Column="1" BorderThickness="1" BorderBrush="Black">
            <TextBlock Text="{Binding Item, Converter={StaticResource Item_to_FullItem}}"/>
        </Border>
        <Border Grid.Column="2" BorderThickness="1" BorderBrush="Black">
            <TextBlock Text="{Binding Path=Weight}"/>
        </Border>
    </Grid>
</DataTemplate>

This way the Binding's data context will be the current ListView item and it should work as expected.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!