C#UWP GridView DataTemplate绑定问题

时间:2017-03-01 15:08:35

标签: c# gridview binding uwp datatemplate

我创建了一个GridView。我已经为它设置了一个ItemTemplate。

        <GridView x:Name="gvMain"
                  HorizontalAlignment="Stretch" 
                  HorizontalContentAlignment="Stretch"
                  ItemTemplate="{StaticResource GridTemplate}"  
                  AllowDrop="True" 
                  CanDragItems="True" 
                  CanReorderItems="True" 
                  ScrollViewer.VerticalScrollBarVisibility="{Binding gridViewCarsScrollViewVisible, ElementName=carsControl}">

    <DataTemplate x:Key="GridTemplate" x:DataType="models:Car">

        <Grid
              HorizontalAlignment="Stretch"                  
              Background="Transparent"
              Tapped="CarTapped">

                <Border x:Name="borderBackground" 
                    Background="White" 
                    Opacity="{x:Bind IsSelected, Converter={StaticResource TransparencyConverter}, Mode=OneWay}"/>                  

        </Grid>     

    </DataTemplate>

在我的模特中,我有一个属性:

    private bool isSelected;
    public bool IsSelected
    {
        get { return isSelected; }
        set { isSelected = value; OnPropertyChanged(); }
    }

我正在改变它:

    private void CarTapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
    {
        var grid = sender as Grid;
        var car = grid.DataContext as Car;

        car.IsSelected = !car.IsSelected;
    }

例如,gridview中有300辆汽车。问题是当我开始向下滚动时,绑定会转到每个将要显示的汽车的IsSelected属性,无论我是否向上,向下...如果我已经返回已经&#34;已加载&#34;汽车仍然绑定正在寻找物业价值。如果有更多属性,如果在某个控件上设置了绑定,它将转到每个属性。这使滚动变得不可能,因为它因此非常不稳定。

为什么绑定试图在项目滚动到视图时获取值? 我尝试使用绑定而不是x:bind,我尝试设置模式:单向,双向,一次......我尝试设置UpdateSourceTrigger = PropertyChanged ...但每次都是相同的结果。

任何线索我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

看起来您正在使用此数据模板禁用UI虚拟化,因为Grid是完全动态调整大小的。尝试明确设置Grid的大小以恢复虚拟化。

有关详情,请参阅https://docs.microsoft.com/en-us/windows/uwp/debug-test-perf/optimize-gridview-and-listview