Windows 8 FlipView和TextBox存在奇怪的绑定问题
我在Windows 8 FlipView和TextBox存在奇怪的绑定问题,windows-8,winrt-xaml,Windows 8,Winrt Xaml,我在FlipView和绑定方面遇到了一个大问题。我有一个FlipView,每个项目上都有一个文本框。当我在文本框中输入文本,然后切换到下一项时,文本框.text值为空。下一个也是。但是在第四项(Index=3)上,它显示了我在Index=0上键入的文本。这继续不会显示在第五和第六项上,但会再次显示在第七项上(Index=6) 因此,如果启用Index=0I在文本框中键入Test,我会在第四张和第七张幻灯片上看到Test(索引3和6)。这种情况可以永远持续下去 要使问题复杂化,它会跟随最后输入的文
FlipView
和绑定方面遇到了一个大问题。我有一个FlipView
,每个项目上都有一个文本框。当我在文本框中输入文本,然后切换到下一项时,文本框.text
值为空。下一个也是。但是在第四项(Index=3
)上,它显示了我在Index=0
上键入的文本。这继续不会显示在第五和第六项上,但会再次显示在第七项上(Index=6
)
因此,如果启用Index=0
I在文本框中键入Test,我会在第四张和第七张幻灯片上看到Test(索引3和6)。这种情况可以永远持续下去
要使问题复杂化,它会跟随最后输入的文本,然后以3的倍数显示该文本。因此,如果我现在转到第二项(Index=1
)并键入Test2,它将出现在Index=4
和Index=7
上
我在多个项目中尝试过这个方法,结果是一样的。我没有另一台可以试一试的电脑。在模拟器、本地机器和远程机器上运行它的结果是相同的
下面是它的样子:
对我来说,这真的很容易重现。只需添加一个基本页面,然后在网格中的该页面添加:
<FlipView Grid.Column="1" Grid.Row="1" Margin="100,0,50,0" x:Name="TabFlipView">
<FlipView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<TextBox Width="400" Height="100" VerticalContentAlignment="Bottom" />
<TextBlock Text="{Binding}"/>
</StackPanel>
</DataTemplate>
</FlipView.ItemTemplate>
</FlipView>
然后运行它。在第一个文本框中键入一些文本。翻到第四项。您刚才在第一项中键入的文本位于第四项的文本框中
如果这是某种特定于机器的问题,而您无法重现,我将如何对此进行故障排除以找到并消除原因?尝试将
VirtualizingStackPanel.VirtualizationMode = "Standard"`
在您的FlipView中。这应该停止回收
有关更多信息,请参见此:
根据评论进行更新
如果您可以避免使用VirtualzingStackPanel,以下方法可能适用于您:
<FlipView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"></StackPanel>
</ItemsPanelTemplate>
</FlipView.ItemsPanel>
这是可行的,但不幸的是,它会在返回任何给定的文本框时清除输入的文本。是的,这是一个缺点,因为它每次都从头开始重新创建面板。一种解决方法是在模式=双向
中绑定.Text
。另一种方法是,如果您的项目数量有限(因为可能会影响性能),则不要使用VirtualzingStackPanel,而是在“FlipView”中使用编辑过的代码。然而,我不确定8.1是如何运行的——这个问题在这种环境下可能已经得到了解决。YMMV,刚在没有面板的情况下试过。完美,正是我所需要的。在8.1中似乎也没有固定。
<FlipView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"></StackPanel>
</ItemsPanelTemplate>
</FlipView.ItemsPanel>