【发布时间】:2017-07-20 23:45:21
【问题描述】:
我创建了一个 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 属性,无论我是向上还是向下……如果我返回已经“加载”的汽车,绑定仍然在寻找属性值.如果有更多属性,如果在某个控件上设置了绑定,它将转到每个属性。这使得滚动变得不可能,因为它非常不稳定。
为什么当项目滚动到视图中时绑定试图获取值? 我尝试使用绑定而不是 x:bind,我尝试设置模式:一种方式,两种方式,一次...我尝试设置 UpdateSourceTrigger=PropertyChanged...但每次结果都相同。
任何线索我在这里做错了什么?
【问题讨论】:
-
你能张贴一张截图/GIF,说明到底发生了什么吗?这有助于更好地理解问题
标签: c# gridview binding uwp datatemplate