【问题标题】:Item is being selected in ListView on page load页面加载时在 ListView 中选择项目
【发布时间】:2013-08-23 17:21:49
【问题描述】:

我的 xaml 中有一个 ListView,它的 ItemsSource 和 SelectedItem 属性绑定到一个 ViewModel。

Xaml

<ListView ItemsSource="{Binding SitesCollection}" SelectedItem="{Binding SelectedSite, Mode=TwoWay}">
    <ListView.ItemTemplate>
        <DataTemplate>
              <TextBlock Text="{Binding url}"></TextBlock>
         </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

视图模型

public ObservableCollection<AWRestrictedSite> _SitesCollection;
public ObservableCollection<AWRestrictedSite> SitesCollection
{
     get
     {
          //populate collection
          return _SitesCollection;
     }
}

public AWRestrictedSite _SelectedSite;
public AWRestrictedSite SelectedSite
{
      get
      {
          return _SelectedSite;
      }
      set
      {
          _SelectedSite = value;
          //do some stuff
      }
 }

由于某种原因,当页面加载时,它会选择 ListView 中的第一项。以下是页面加载时发生的情况:

  1. 正在调用进入 SitesCollection(它填充列表视图并返回集合)。
  2. 调用Get inside SelectedSite,返回null
  3. 调用 SelectedSite 内的 Set 将值设置为第一项

有谁知道为什么会发生这种情况?

【问题讨论】:

  • 这很奇怪。我有一个看起来和这个几乎完全相同的控件,并且最初没有选择任何内容。也许在初始化期间发生了将SelectedSite 设置为不为空的事情?
  • 嗯,是的,在初始化期间以某种方式设置了 SelectedSite。我已经仔细检查过,我没有在设置 SelectedSite 方面做任何事情。
  • 实际上,我想我知道为什么了。这与我的应用程序的设置方式有关。我在不同的页面上有一个 TextBlock 和一个按钮。当您按下按钮或在文本框上按下回车键时,它会将您带到此页面(使用列表视图)。并且这个错误(选择了项目)仅在按下 enter 时发生。所以我认为这与页面加载时仍以某种方式按下回车键有关,因此选择了该项目。

标签: c# .net xaml windows-store-apps


【解决方案1】:

它是一种双向绑定,当加载时,ListView(我认为)选择其绑定集合中的第一项。尝试将Loaded 方法添加到ListView 并在其中设置SelectedItem。这应该发生在第一个项目被选中之后。

【讨论】:

    【解决方案2】:

    这通常发生在我们将ListView 的SelectedItem 设置为ItemsSourceCollection.FirstOrDefault() 时

    【讨论】:

      猜你喜欢
      • 2014-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 2017-09-23
      • 1970-01-01
      • 2013-03-11
      • 2021-10-19
      相关资源
      最近更新 更多