日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ListView的使用和数据绑定

發布時間:2025/6/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ListView的使用和数据绑定 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

下面介紹一下ListView的相關使用,新建一個叫做TestList的項目。

在主頁面的后臺代碼中加入一堆數據:

[csharp] view plaincopy
  • protected?override?void?OnNavigatedTo(NavigationEventArgs?e)??
  • ???????{??
  • ???????????if?(e.NavigationMode?==?NavigationMode.New)??
  • ???????????{??
  • ???????????????List<string>myList?=?new?List<string>;??
  • ???????????????myList.Add("Why?Test?1");??
  • ???????????????myList.Add("Why?Test?2");??
  • ???????????????myList.Add("Why?Test?3");??
  • ???????????????myList.Add("Why?Test?4");??
  • ???????????}??
  • ???????}??

  • 然后在xaml頁面拖拽一個Listview到頁面上,并且命名為list1。



    接下來就是把ListView的數據源綁定到后臺定義的集合中。

    只需要設置ListView的ItemsSource即可。完整的代碼如下:

    [csharp] view plaincopy
  • using?System;??
  • using?System.Collections.Generic;??
  • using?System.IO;??
  • using?System.Linq;??
  • using?Windows.Foundation;??
  • using?Windows.Foundation.Collections;??
  • using?Windows.UI.Xaml;??
  • using?Windows.UI.Xaml.Controls;??
  • using?Windows.UI.Xaml.Controls.Primitives;??
  • using?Windows.UI.Xaml.Data;??
  • using?Windows.UI.Xaml.Input;??
  • using?Windows.UI.Xaml.Media;??
  • using?Windows.UI.Xaml.Navigation;??
  • ??
  • //?“空白頁”項模板在?http://go.microsoft.com/fwlink/?LinkId=234238?上有介紹??
  • ??
  • namespace?TestList??
  • {??
  • ????///?<summary>??
  • ????///?可用于自身或導航至?Frame?內部的空白頁。??
  • ????///?</summary>??
  • ????public?sealed?partial?class?MainPage?:?Page??
  • ????{??
  • ????????public?MainPage()??
  • ????????{??
  • ????????????this.InitializeComponent();??
  • ????????}??
  • ??
  • ????????///?<summary>??
  • ????????///?在此頁將要在?Frame?中顯示時進行調用。??
  • ????????///?</summary>??
  • ????????///?<param?name="e">描述如何訪問此頁的事件數據。Parameter??
  • ????????///?屬性通常用于配置頁。</param>??
  • ????????protected?override?void?OnNavigatedTo(NavigationEventArgs?e)??
  • ????????{??
  • ????????????if?(e.NavigationMode?==?NavigationMode.New)??
  • ????????????{??
  • ????????????????List<string>myList?=?new?List<string>();??
  • ????????????????myList.Add("Why?Test?1");??
  • ????????????????myList.Add("Why?Test?2");??
  • ????????????????myList.Add("Why?Test?3");??
  • ????????????????myList.Add("Why?Test?4");??
  • ??
  • ????????????????list1.ItemsSource?=?myList;??
  • ????????????}??
  • ????????}??
  • ????}??
  • }??

  • 對應的xaml的完整代碼如下: [html] view plaincopy
  • <Page??
  • ????x:Class="TestList.MainPage"??
  • ????xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"??
  • ????xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"??
  • ????xmlns:local="using:TestList"??
  • ????xmlns:d="http://schemas.microsoft.com/expression/blend/2008"??
  • ????xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"??
  • ????mc:Ignorable="d">??
  • ??
  • ????<Grid?Background="{StaticResource?ApplicationPageBackgroundThemeBrush}">??
  • ????????<ListView?x:Name="list1"?HorizontalAlignment="Center"?Height="600"?VerticalAlignment="Center"?Width="500"/>??
  • ????</Grid>??
  • </Page>??

  • 運行效果如圖所示:



    ItemsSource為界面上顯示的數據集合。

    但是這樣簡單的顯示一般很難滿足需求,我們需要自定義復雜的ListView才行。

    在xaml中如下修改:

    [html] view plaincopy
  • <Page??
  • ????x:Class="TestList.MainPage"??
  • ????xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"??
  • ????xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"??
  • ????xmlns:local="using:TestList"??
  • ????xmlns:d="http://schemas.microsoft.com/expression/blend/2008"??
  • ????xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"??
  • ????mc:Ignorable="d">??
  • ??
  • ????<Grid?Background="{StaticResource?ApplicationPageBackgroundThemeBrush}">??
  • ????????<ListView?x:Name="list1"?HorizontalAlignment="Center"?Height="600"?VerticalAlignment="Center"?Width="500">??
  • ????????????<ListView.ItemTemplate>??
  • ????????????????<DataTemplate>??
  • ????????????????????<StackPanel?Orientation="Horizontal">??
  • ????????????????????????<TextBox?Text="{Binding}"/>??
  • ????????????????????????<Button?Content="{Binding}"/>??
  • ????????????????????</StackPanel>??
  • ????????????????</DataTemplate>??
  • ????????????</ListView.ItemTemplate>??
  • ????????</ListView>??
  • ????</Grid>??
  • </Page>??

  • 這樣再運行的時候就可以顯示多個控件了:



    注釋:直接Text="{Binding}"就是說數值直接等于上下文。


    接下來看看ListView的其他用法。

    1.選定模式:SelectionMode

    SelectionMode="None":列表中的各項無法被選擇

    SelectionMode="Single":只能單項被選擇

    SelectionMode="Multiple":可以多選模式

    那么如何獲得選中的對象呢?

    拖一個按鈕來做實驗:

    [html] view plaincopy
  • <Page??
  • ????x:Class="TestList.MainPage"??
  • ????xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"??
  • ????xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"??
  • ????xmlns:local="using:TestList"??
  • ????xmlns:d="http://schemas.microsoft.com/expression/blend/2008"??
  • ????xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"??
  • ????mc:Ignorable="d">??
  • ??
  • ????<Grid?Background="{StaticResource?ApplicationPageBackgroundThemeBrush}">??
  • ????????<ListView?x:Name="list1"?SelectionMode="Multiple"??
  • ??????????????????HorizontalAlignment="Center"?Height="150"?VerticalAlignment="Center"?Width="500">??
  • ????????????<ListView.ItemTemplate>??
  • ????????????????<DataTemplate>??
  • ????????????????????<StackPanel?Orientation="Horizontal">??
  • ????????????????????????<TextBox?Text="{Binding}"/>??
  • ????????????????????????<Button?Content="{Binding}"/>??
  • ????????????????????</StackPanel>??
  • ????????????????</DataTemplate>??
  • ????????????</ListView.ItemTemplate>??
  • ????????</ListView>??
  • ????????<Button?Content="獲得選中的對象"?HorizontalAlignment="Center"?Margin="0,200,0,0"?VerticalAlignment="Center"/>??
  • ????</Grid>??
  • </Page>??

  • 雙擊按鈕添加監聽:

    [csharp] view plaincopy
  • private?void?Button_Click_1(object?sender,?RoutedEventArgs?e)??
  • ??????{??
  • ??????????//選中的單個項目:list1.SelectedItem??
  • ??????????//選中的多個項目:list1.SelectedItems??
  • ??????????Button?button?=?(Button)sender;??
  • ??????????button.Content?=?list1.SelectedItem;??
  • ??????}??

  • 此時再運行,選中某項之后點擊按鈕便會發現按鈕的內容發生了改變:


    其中返回的SelectedItem為選中項的數據上下文。


    2.選中事件:ItemClick

    在使用這個事件之前需要啟用ItemClick,開啟方式:?IsItemClickEnabled="True"。

    接下來在控件的屬性窗口可以找到有一個事件(小閃電圖標),將其命名:Item_Click,按下回車。

    自動跳轉到了后臺的代碼頁面,并且創建了相應的相應方法:

    [csharp] view plaincopy
  • private?void?Item_Click(object?sender,?ItemClickEventArgs?e)??
  • {??
  • ??
  • }??
  • e.ClickedItem為點擊的選項。

    可以用下面的代碼來做一段測試:

    [csharp] view plaincopy
  • private?void?Item_Click(object?sender,?ItemClickEventArgs?e)??
  • {??
  • ????MessageDialog?msg?=?new?MessageDialog(e.ClickedItem.ToString());??
  • ????msg.ShowAsync();??
  • }??

  • 此時再點擊就會出現選中的對應的數據了。


    那么如何做到動態加載數據呢?比如從網上加載信息,加載多少顯示多少是怎么實現的呢?

    實現INotifyCollectionChanged接口即可。

    當然win8中有自帶的集合類:ObservableCollection,實現了INotifyCollectionChanged接口,其他操作基本和List一樣

    使用的方法很簡單,將原來的代碼稍作修改即可:

    [csharp] view plaincopy
  • using?System;??
  • using?System.Collections.Generic;??
  • using?System.Collections.ObjectModel;??
  • using?System.Collections.Specialized;??
  • using?System.IO;??
  • using?System.Linq;??
  • using?Windows.Foundation;??
  • using?Windows.Foundation.Collections;??
  • using?Windows.UI.Popups;??
  • using?Windows.UI.Xaml;??
  • using?Windows.UI.Xaml.Controls;??
  • using?Windows.UI.Xaml.Controls.Primitives;??
  • using?Windows.UI.Xaml.Data;??
  • using?Windows.UI.Xaml.Input;??
  • using?Windows.UI.Xaml.Media;??
  • using?Windows.UI.Xaml.Navigation;??
  • ??
  • //?“空白頁”項模板在?http://go.microsoft.com/fwlink/?LinkId=234238?上有介紹??
  • ??
  • namespace?TestList??
  • {??
  • ????///?<summary>??
  • ????///?可用于自身或導航至?Frame?內部的空白頁。??
  • ????///?</summary>??
  • ????public?sealed?partial?class?MainPage?:?Page??
  • ????{??
  • ????????ObservableCollection<string>?myList?=?new?ObservableCollection<string>();??
  • ??
  • ??
  • ????????public?MainPage()??
  • ????????{??
  • ????????????this.InitializeComponent();??
  • ????????}??
  • ??
  • ????????///?<summary>??
  • ????????///?在此頁將要在?Frame?中顯示時進行調用。??
  • ????????///?</summary>??
  • ????????///?<param?name="e">描述如何訪問此頁的事件數據。Parameter??
  • ????????///?屬性通常用于配置頁。</param>??
  • ????????protected?override?void?OnNavigatedTo(NavigationEventArgs?e)??
  • ????????{??
  • ????????????if?(e.NavigationMode?==?NavigationMode.New)??
  • ????????????{??
  • ????????????????myList.Add("Why?Test?1");??
  • ????????????????myList.Add("Why?Test?2");??
  • ????????????????myList.Add("Why?Test?3");??
  • ????????????????myList.Add("Why?Test?4");??
  • ??
  • ????????????????list1.ItemsSource?=?myList;??
  • ????????????}??
  • ????????}??
  • ??
  • ????????private?void?Button_Click_1(object?sender,?RoutedEventArgs?e)??
  • ????????{??
  • ????????????//選中的單個項目:list1.SelectedItem??
  • ????????????//選中的多個項目:list1.SelectedItems??
  • ????????????myList.Add(DateTime.Now.ToString());??
  • ??????????
  • ????????}??
  • ??
  • ????????private?void?Item_Click(object?sender,?ItemClickEventArgs?e)??
  • ????????{??
  • ????????????MessageDialog?msg?=?new?MessageDialog(e.ClickedItem.ToString());??
  • ????????????msg.ShowAsync();??
  • ????????}??
  • ????}??
  • }?
  • 總結

    以上是生活随笔為你收集整理的ListView的使用和数据绑定的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。