FlipView SelectionChange C#

时间:2013-05-07 07:45:09

标签: c# flipview

我正在创建一个简单的metro应用程序来显示图像和与图像相关的一些内容。

Ex: 图像:数据 img1:“蝴蝶的形象” img2:“你好天空” img3:“金毛猎犬的图片”

我已将图像加载到flipview中。并将数据转换为数组。

<FlipView HorizontalAlignment="Left" Margin="102,147,0,0" VerticalAlignment="Top" Width="627" Height="429" Name="fiImage" SelectionChanged="fiImage_SelectionChanged">
      <Image Source="Assets/image1.png"  Name="Img1" />
      <Image Source="Assets/image2.png"  Name="Img2" />
</FlipView>

我在xaml中有一个名为“tbN”的TextBlock。我想要做的是当我使用指针更改图像时,相关数据应显示在文本块中。

我尝试在选择更改事件

下面执行代码
private void fiImage_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    int i = ((FlipView)sender).SelectedIndex;
    tbN.Text = a[i];  //error line
}

但是当我执行程序时,我收到一条错误,说“用户代码未处理NullReferenceException:对象引用未设置为对象的实例。”

我错过了什么?

3 个答案:

答案 0 :(得分:0)

似乎 a [i] 尚未初始化且没有值。它是一个全局变量吗? 调试代码并检查其内容。它必须为空。

如果它不为null,则该数组可能没有 i 值。或者它可能超出阵列长度。

tbN.Text = a[i]; //a[i] must be null, where is it initialized?

答案 1 :(得分:0)

SelectionChanged事件也会在初始化时触发(第一个子节点“已选中”)。 您的控制(tbN)当时不存在。

检查tbN是否为null以避免NRef。例外!

private void fiImage_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (tbN != null)
    {
        int i = ((FlipView)sender).SelectedIndex;
        tbN.Text = a[i]; 
    }
}

答案 2 :(得分:0)

我找到了解决方法HERE

private void FlipView_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
{
    FlipView fv = sender as FlipView;
    if (fv.SelectedItem == null) return;
    var item = fv.ItemContainerGenerator.ContainerFromItem(fv.SelectedItem);
    if (item == null)
    {
        Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                var itemSecondTime = fv.ItemContainerGenerator.ContainerFromItem(fv.SelectedItem);
                if (itemSecondTime == null)
                {
                    throw new InvalidOperationException("no item.  Why????");
                }
            });
    }
}