国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

WPF入門教程系列二十九 ——DataGrid使用示例MVVM模式(7)

這篇具有很好參考價值的文章主要介紹了WPF入門教程系列二十九 ——DataGrid使用示例MVVM模式(7)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

WPF入門教程系列目錄
WPF入門教程系列二——Application介紹
WPF入門教程系列三——Application介紹(續(xù))
WPF入門教程系列四——Dispatcher介紹

WPF入門教程系列五——Window 介紹

WPF入門教程系列十一——依賴屬性(一)
WPF入門教程系列十五——WPF中的數(shù)據(jù)綁定(一)
?
接上文WPF入門教程系列二十八 ——DataGrid使用示例MVVM模式(6)

??? 13.通過Command指令,傳遞了下拉框所選擇的省份,datagrid自動顯示相應(yīng)省份的城市信息,但是以上示例中有一個Bug,就是下拉框中綁定的數(shù)據(jù)無法顯示。

這是由于DataGridComboBoxColumn若要填充下拉列表,請先使用以下選項(xiàng)之一設(shè)置 ItemsSource 屬性 ComboBox :

??? 1)靜態(tài)資源。 使用StaticResource 標(biāo)記擴(kuò)展。

??? 2)x:Static 代碼實(shí)體。 使用x:Static 標(biāo)記擴(kuò)展。

??? 3)類型的內(nèi)聯(lián)集合 ComboBoxItem 。

14.比較適合的綁定方式是? 2)x:Static 代碼實(shí)體。 使用x:Static 標(biāo)記擴(kuò)展需要添加相應(yīng)的命名空間。在Visual Studio 2022中打開MainWindows.xmal文件,并在文件的開頭添加如下命名空間。???????????

  xmlns:v="clr-namespace:WpfGridDemo.NET7.ViewModel"

15. 在Visual Studio 2022中打開MainWindows.xmal文件。對DataGridComboBoxColumn的ItemsSource進(jìn)行了數(shù)據(jù)綁定。具體代碼如下:

<DataGridComboBoxColumn Header="城市" Width="120"  x:Name="cboCity" 
ItemsSource
="{x:Static v:MainWindowVM.GridCityList}" ClipboardContentBinding="{x:Null}" SelectedValuePath="Code"
SelectedValueBinding
="{Binding Path=CityCode,UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath
="Name" SelectedItemBinding="{x:Null}" />
16.在Visual Studio 2022的解決方案資源管理器中,找到MainWindowVM.cs文件,將GridCityList屬性改為靜態(tài)屬性,用于綁定DataGridComboBoxColumn的ItemsSource。具體如下代碼:
        private static ObservableCollection<City> cityList;
        public static ObservableCollection<City> GridCityList
        {

            get { return cityList; }
            set
            {

                cityList = value;
                new ViewModelBase().RaisePropertyChanged("GridCityList");
            }

        }
17.在Visual Studio 2022中按F5鍵,啟動WPF應(yīng)用程序。然后使用鼠標(biāo)點(diǎn)擊省份下拉框,能夠看到,界面中DataGrid中的數(shù)據(jù),隨著下拉框的變化而隨之變化,但是城市下拉框中卻沒有任何數(shù)據(jù)??磥斫壎ㄊЯ?。如下圖。

?WPF入門教程系列二十九 ——DataGrid使用示例MVVM模式(7)

?文章來源地址http://www.zghlxwxcb.cn/news/detail-499497.html

?

?

?

18. 使用靜態(tài)代碼實(shí)體的方式,實(shí)現(xiàn)省市縣聯(lián)動失敗了。又不想使用其他兩種方式。在一陣猛于虎的搜索之后,發(fā)現(xiàn)一種實(shí)現(xiàn)方式。在Visual Studio 2022中打開MainWindows.xmal文件。對DataGridComboBoxColumn進(jìn)行了數(shù)據(jù)綁定。具體代碼如下:

<DataGridComboBoxColumn Header="城市(Style)" SelectedValuePath="Code"
SelectedValueBinding="{Binding Path=CityCode,UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath
="Name" SelectedItemBinding="{x:Null}" Width="1*"> <DataGridComboBoxColumn.EditingElementStyle> <Style TargetType="ComboBox"> <Setter Property="ItemsSource"
Value
="{Binding Path=DataContext.GridCity,ElementName=gridArea}" /> </Style> </DataGridComboBoxColumn.EditingElementStyle> <DataGridComboBoxColumn.ElementStyle> <Style TargetType="ComboBox"> <Setter Property="ItemsSource"
Value
="{Binding Path=DataContext.GridCity,ElementName=gridArea}" /> </Style> </DataGridComboBoxColumn.ElementStyle> </DataGridComboBoxColumn>
??????????????

19.在Visual Studio 2022的解決方案資源管理器中,找到MainWindowVM.cs文件,添加一個GridCity屬性,用于綁定DataGridComboBoxColumn的ItemsSource。以下是屬性代碼,更完整的代碼,請參見下面類的完整代碼。

private ObservableCollection<City> listCity;

        public ObservableCollection<City> GridCity
        {

            get { return listCity; }
            set
            {
                listCity = value;
                RaisePropertyChanged("GridCity");
            }
        }
20.MainWindow.xmal的全部代碼如下:
<Window x:Class="WpfGridDemo.NET7.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
          xmlns:be="http://schemas.microsoft.com/xaml/behaviors"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfGridDemo.NET7"
          xmlns:v="clr-namespace:WpfGridDemo.NET7.ViewModel"
        mc:Ignorable="d"
        Title="MainWindow" Height="600" Width="960" Loaded="Window_Loaded" >

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="100"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="25"></RowDefinition>
        </Grid.RowDefinitions>
        <WrapPanel Grid.Row="0" HorizontalAlignment="Left">
            <ComboBox x:Name="cboProvince" DisplayMemberPath="Name" SelectedValuePath="Code" >
                <be:Interaction.Triggers>
                    <be:EventTrigger EventName="SelectionChanged">
                        <be:InvokeCommandAction Command="{Binding ProviceChangedAction}"
CommandParameter="{Binding ElementName=cboProvince}"/> </be:EventTrigger> </be:Interaction.Triggers> </ComboBox> </WrapPanel> <DataGrid x:Name="gridArea" Grid.Row="1" ItemsSource="{Binding GridAreaList}"
AutoGenerateColumns
="False" HorizontalAlignment="Left" VerticalAlignment="Top"
SelectedItem
="{Binding Path=AreaVM,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> <DataGrid.Columns> <DataGridComboBoxColumn Header="城市" Width="120" x:Name="cboCity"
ItemsSource
="{x:Static v:MainWindowVM.GridCityList}" ClipboardContentBinding="{x:Null}" SelectedValuePath="Code"
SelectedValueBinding
="{Binding Path=CityCode,UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath
="Name" SelectedItemBinding="{x:Null}" /> <DataGridComboBoxColumn Header="城市(Style)" SelectedValuePath="Code"
SelectedValueBinding="{Binding Path=CityCode,UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath
="Name" SelectedItemBinding="{x:Null}" Width="1*"> <DataGridComboBoxColumn.EditingElementStyle> <Style TargetType="ComboBox"> <Setter Property="ItemsSource"
Value
="{Binding Path=DataContext.GridCity,ElementName=gridArea}" /> </Style> </DataGridComboBoxColumn.EditingElementStyle> <DataGridComboBoxColumn.ElementStyle> <Style TargetType="ComboBox"> <Setter Property="ItemsSource"
Value
="{Binding Path=DataContext.GridCity,ElementName=gridArea}" /> </Style> </DataGridComboBoxColumn.ElementStyle> </DataGridComboBoxColumn> <DataGridTextColumn Header="縣區(qū)鎮(zhèn)" Width="*"
Binding
="{Binding Name}" ClipboardContentBinding="{x:Null}"/> <DataGridTextColumn Header="郵編" Width="100"
Binding
="{Binding Code}" ClipboardContentBinding="{x:Null}"/> <DataGridTextColumn Header="創(chuàng)建時間" Width="160"
Binding
="{Binding Created}" ClipboardContentBinding="{x:Null}"/> <DataGridTextColumn Header="更新時間" Width="160"
Binding
="{Binding Updated}" ClipboardContentBinding="{x:Null}"/> </DataGrid.Columns> </DataGrid> <WrapPanel Grid.Row="2"> <Button x:Name="btnRefresh" Height="22" Width="120" Click="btnRefresh_Click">刷新</Button>
<Button x:Name="btnSave" Height="22" Width="120" Command="{Binding ClickSaveAction}" >保存</Button> </WrapPanel> </Grid> </Window>

?

21. MainWindowsVM類的完整代碼,如下:
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.DirectoryServices.ActiveDirectory;

using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;

using System.Windows.Input;
using WpfGridDemo.NET7.Entitys;
 

namespace WpfGridDemo.NET7.ViewModel
{

    public class MainWindowVM: ViewModelBase
    {

        public MainWindowVM() {
            cityList = new ObservableCollection<City>();

            areaList = new ObservableCollection<Area>();

            listCity = new ObservableCollection<City>();   

        }

        private Area m_Area;

        /// <summary>
        /// 縣鎮(zhèn)區(qū)數(shù)據(jù)
        /// </summary>
        public Area AreaVM

        {

            get { return m_Area; }

            set { m_Area = value; }

        }

        private string m_Province_Code;

        /// <summary>
        /// 省--代碼
        /// </summary>

        public string ProvinceCode { get => m_Province_Code; set => m_Province_Code = value; }

        private ObservableCollection<Area> areaList;

         public ObservableCollection<Area> GridAreaList
         {
             get { return areaList; }

             set
             {

                areaList = value;
                 RaisePropertyChanged("GridAreaList");

             }

        }

        private static ObservableCollection<City> cityList;

        public static ObservableCollection<City> GridCityList
        {

            get { return cityList; }

            set
            {
                cityList = value;
                new ViewModelBase().RaisePropertyChanged("GridCityList");
            }
        } 

        private ObservableCollection<City> listCity;

        public ObservableCollection<City> GridCity

        {
            get { return listCity; }
            set

            {
                listCity = value;
                RaisePropertyChanged("GridCity");
            }

        }

        /// <summary>
        /// 命令要執(zhí)行的方法
        /// </summary>
        void SaveExecute()
        {

            try
            {

                GridDbContext db = new GridDbContext();
                var list=db.Area.AsTracking().ToList();
                Area modifyArea = list.Where(x=>x.Id==AreaVM.Id).FirstOrDefault();

                if (modifyArea != null)

                {

                    modifyArea.Name = AreaVM.Name;

                    modifyArea.Updated = DateTime.Now;

                    db.SaveChanges();

                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

 

        /// <summary>
        /// 命令是否可以執(zhí)行
        /// </summary>
        /// <returns></returns>
        bool CanSaveExecute()
        {
            return false;
        }

 

        /// <summary>
        /// 創(chuàng)建新命令
        /// </summary>
        public ICommand ClickSaveAction
        {
            get
            {
                return new Command.SaveCommand(SaveExecute, CanSaveExecute);
            }

        }

        //combobox
        /// <summary>
        /// 命令要執(zhí)行的方法
        /// </summary>
        void ProviceSelectionChangedExecute(object sender)
        {
            try
            {

                if (sender is ComboBox)

                {

                    ComboBox drp=sender as ComboBox;

                    ProvinceCode=drp.SelectedValue.ToString();

                    GridDbContext db = new GridDbContext();

                    var list = db.City.AsTracking().ToList();

                    List<City> citys = list.Where(x => x.ProvinceCode == ProvinceCode).ToList();

                    var cityCodes = from city in citys

                                    select city.Code;

                    List<Area> areas = db.Area.AsTracking().ToList()
.Where(x => cityCodes.Contains(x.CityCode)).ToList(); areaList.Clear(); if (areas!=null) { areas.ForEach((t) => { areaList.Add(t); } ); } cityList.Clear(); if (citys != null) { citys.ForEach((t) => { cityList.Add(t); } ); } listCity.Clear(); if (citys != null) { citys.ForEach((t) => { listCity.Add(t); } ); } } } catch (Exception ex) { throw ex; } } /// <summary> /// 命令是否可以執(zhí)行 /// </summary> /// <returns></returns> bool CanSelectionChangedExecute() { return true; } /// <summary> /// 創(chuàng)建新命令 /// </summary> public ICommand ProviceChangedAction { get { return new Command.ProvinceChangedCommand<object>(ProviceSelectionChangedExecute
, CanSelectionChangedExecute); } } } }

22.在Visual Studio 2022中按F5鍵,啟動WPF應(yīng)用程序。然后使用鼠標(biāo)點(diǎn)擊省份下拉框,能夠看到,界面中DataGrid中的數(shù)據(jù),隨著下拉框的變化而隨之變化,其中使用靜態(tài)實(shí)體代碼綁定的城市下拉框中卻沒有任何數(shù)據(jù)。使用使用非靜態(tài)資源,在<DataGridComboBoxColumn.EditingElementStyle>與 <DataGridComboBoxColumn.ElementStyle>兩個樣式中綁定combobox的itemSource屬性方式,效果有效。如下圖。

WPF入門教程系列二十九 ——DataGrid使用示例MVVM模式(7)

?

到了這里,關(guān)于WPF入門教程系列二十九 ——DataGrid使用示例MVVM模式(7)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • WPF入門教程系列二十七 ——DataGrid使用示例MVVM模式(4)

    WPF入門教程系列目錄 WPF入門教程系列二——Application介紹 WPF入門教程系列三——Application介紹(續(xù)) WPF入門教程系列四——Dispatcher介紹 WPF入門教程系列五——Window 介紹 WPF入門教程系列十一——依賴屬性(一) WPF入門教程系列十五——WPF中的數(shù)據(jù)綁定(一) ? ? ? 計算機(jī)界的頂

    2024年02月07日
    瀏覽(24)
  • WPF入門教程系列二十八 ——DataGrid使用示例MVVM模式(6)

    WPF入門教程系列二十八 ——DataGrid使用示例MVVM模式(6)

    WPF入門教程系列目錄 WPF入門教程系列二——Application介紹 WPF入門教程系列三——Application介紹(續(xù)) WPF入門教程系列四——Dispatcher介紹 WPF入門教程系列五——Window 介紹 WPF入門教程系列十一——依賴屬性(一) WPF入門教程系列十五——WPF中的數(shù)據(jù)綁定(一) ? ? ? 7.上面Buttom的

    2024年02月09日
    瀏覽(25)
  • WPF入門教程系列三十 ——DataGrid驗(yàn)證

    WPF入門教程系列三十 ——DataGrid驗(yàn)證

    WPF入門教程系列目錄 WPF入門教程系列二——Application介紹 WPF入門教程系列三——Application介紹(續(xù)) WPF入門教程系列四——Dispatcher介紹 WPF入門教程系列五——Window 介紹 WPF入門教程系列十一——依賴屬性(一) WPF入門教程系列十五——WPF中的數(shù)據(jù)綁定(一) ? ???????? DataG

    2024年02月12日
    瀏覽(27)
  • WPF入門教程系列一——基礎(chǔ)

    WPF入門教程系列一——基礎(chǔ)

    一、?前言?? ?? ????? 最近在學(xué)習(xí)WPF,學(xué)習(xí)WPF首先上的是微軟的MSDN,然后再搜索了一下網(wǎng)絡(luò)有關(guān)WPF的學(xué)習(xí)資料。為了溫故而知新把學(xué)習(xí)過程記錄下來,以備后查。這篇主要講WPF的開發(fā)基礎(chǔ),介紹了如何使用Visual?Studio?2013創(chuàng)建一個WPF應(yīng)用程序。 首先說一下學(xué)習(xí)WPF的基礎(chǔ)知

    2024年02月07日
    瀏覽(32)
  • MaterialDesignInXAML WPF入門教程 快速入門

    MaterialDesignInXAML WPF入門教程 快速入門

    先去MaterialDesignInXAML下載下來源碼,以及Releases,在DemoApp 中就可以看到實(shí)際的效果很驚艷了。 除了要有一定的C#、winform 基礎(chǔ)外,建議先學(xué)習(xí)一下 XAML,對整個開發(fā)環(huán)境有個基礎(chǔ)的了解,再來學(xué)習(xí)此教程。 可以去bilibili上免費(fèi)學(xué)習(xí)一下。教程一共12個小時,如果不看后面的實(shí)戰(zhàn)

    2024年02月05日
    瀏覽(28)
  • WPF真入門教程01--WPF簡介

    ? ? ? ? Windows Presentation Foundation (簡稱 WPF),WPF是微軟推出的基于Windows 的用戶界面框架,屬于.NET Framework 3.0的一部分。它提供了統(tǒng)一的編程模型、語言和框架,真正做到了分離界面設(shè)計人員與開發(fā)人員的工作;同時它提供了全新的多媒體交互用戶圖形界面。因與“我佩服”拼

    2024年02月06日
    瀏覽(24)
  • WPF真入門教程02--新建WPF工程

    WPF真入門教程02--新建WPF工程

    在VS開發(fā)環(huán)境安裝完成之后,首先我們先新建一個WPF工程,然后對工程目錄結(jié)構(gòu)啥的要有所了解才行。 打開VS2019 ? ? ?工程建好之后,WPF應(yīng)用程序”會在“引用”里面自動添加下圖中所示的?PresentationCore、PresentationFramework、WindowsBase三大核心程序集,就是下面這個樣子 ? 默認(rèn)

    2024年02月03日
    瀏覽(26)
  • WPF 入門教程DockPanel介紹

    WPF 入門教程DockPanel介紹

    在 DockPanel中 可以很容易地??吭谒兴膫€方向的內(nèi)容(上,下,左,右)。這使它在許多情況下成為一個很好的選擇,您希望將窗口劃分為特定區(qū)域,特別是因?yàn)槟J(rèn)情況下,DockPanel 內(nèi)的最后一個元素,除非此功能被明確禁用,否則將自動填充其余空間(中心)。 我們在

    2024年02月05日
    瀏覽(37)
  • WPF教程_編程入門自學(xué)教程_菜鳥教程-免費(fèi)教程分享

    WPF教程 WPF - 概述 WPF - 環(huán)境設(shè)置 WPF - Hello World WPF - XAML概述 WPF - Elements Tree WPF - 依賴屬性 WPF - 路由事件 WPF - 控件 WPF - 布局 WPF - 布局嵌套 WPF - 輸入 WPF - 命令行 WPF - 數(shù)據(jù)綁定 WPF - 資源 WPF - 模板 WPF - 樣式 WPF - 觸發(fā)器 WPF - 調(diào)試 WPF - 自定義控件 WPF - 異常處理 WPF - 本地化 WPF - 互

    2023年04月27日
    瀏覽(27)
  • JavaScript從入門到精通系列第二十九篇:正則表達(dá)式初體驗(yàn)

    JavaScript從入門到精通系列第二十九篇:正則表達(dá)式初體驗(yàn)

    ? 文章目錄 一:正則表達(dá)式 1:簡介 2:正則表達(dá)式 3:檢查字符串 ? ? ? ? 正則表達(dá)式應(yīng)用的場景是什么呢?比方說檢查客戶注冊的電子郵件的格式的標(biāo)準(zhǔn)性。讓計算機(jī)基于固定的格式,去檢測用戶輸入的電子郵件地址是不是正確的電子郵件地址。 ? ? ? ? 正則表達(dá)式用于

    2024年02月06日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包