主頁 > 企業開發 > 使用WPFListView中的更新按鈕更新所選專案

使用WPFListView中的更新按鈕更新所選專案

2022-01-29 12:40:46 企業開發

為了客戶管理的目的,我必須制作一個 WPF 應用程式來添加、洗掉和更新專案。到目前為止,我已經能夠使用 MVVM 在串列中添加和洗掉專案,但我無法更新所選專案。我需要這方面的幫助。該專案的代碼如下:

細節類.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;



namespace Assignment_2.Model
{
    public class Details :INotifyPropertyChanged
    {
        private string name;
        public string Name
        { get { return name; } set { name = value; OnPropertyChanged(Name); } }

        private string company;
        public string Company 
        { get { return company; } set { company = value; OnPropertyChanged(Company); } }  
        
        private string region;
        public string Region 
        { get { return region; } set { region = value; OnPropertyChanged(Region); } }


        private string hra;
        public string HRA
        {
            get { return hra; }
            set
            {
                hra = value;
                OnPropertyChanged(HRA);
            }
        }



        private string basic;
        public string Basic
        { get { return basic; } 
            set { basic = value;
                OnPropertyChanged(Basic);
            } 
        }

        private string pf;
        public string PF
        { get { return pf; } 
            set 
            { 
                pf = value;
                OnPropertyChanged(PF);
            } 
        }

        private string salary;
        public string Salary
        { get { return salary; } 
            set 
            { 
                salary = value;
                OnPropertyChanged(Salary);
            }
        }

       

        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged(string det)
        {
            PropertyChangedEventHandler pc = PropertyChanged;
            if (pc != null)
                pc(this, new PropertyChangedEventArgs(det));
            
        }


       
    }
}

詳細資訊ViewModel.cs

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using Assignment_2.Commands;
using Assignment_2.Model;

namespace Assignment_2.ViewModel
{
    public class DetailsViewModel : INotifyPropertyChanged
    {
        

        private Details record;
        public Details Record
        {
            get { return record; }
            set { record = value; NotifyPropertyChanged("Record"); }
        }
        private ObservableCollection<Details> records;
        public ObservableCollection<Details> Records
        {
            get { return records; }
            set { records = value; } //  NotifyPropertyChanged("Records");
        }


            
        private ICommand _SubmitCommand;
        public ICommand SubmitCommand
        {
            get
            {
                if (_SubmitCommand == null)
                {
                    _SubmitCommand = new RelayCommand(SubmitExecute, CanSubmitExecute, false);
                }
                return _SubmitCommand;
            }
        }

        public DetailsViewModel()
        {
            Record = new Details();
            Records = new ObservableCollection<Details>();
            
        }
         

        private void SubmitExecute(object parameter)
        {
            var TempRecord = new Details();
            //TempRecord = Record;

            TempRecord.Name = Record.Name;
            TempRecord.Company = Record.Company;
            TempRecord.Region = Record.Region;
            TempRecord.HRA = Record.HRA;
            TempRecord.Salary = Record.Salary;
            TempRecord.Basic = Record.Basic;
            TempRecord.PF = Record.PF;

            Records.Add(TempRecord);
        }
        
        private bool CanSubmitExecute(object parameter)
        {
            if (string.IsNullOrEmpty(Record.Name) || string.IsNullOrEmpty(Record.Company))
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        private ICommand _SubmitCommand1;
        public ICommand SubmitCommand1
        {
            get
            {
                if (_SubmitCommand1 == null)
                {
                    _SubmitCommand1 = new RelayCommand(SubmitExecute1, CanSubmitExecute1, false);
                }
                return _SubmitCommand1;
            }
        }

        public int findIndex(Details myDetails)
        {
            int count = 0;
            for (int i = 0; i < Records.Count; i  )
            {
                count = 0;
                Details myRecord = Records[i];
                if (myRecord.Name == myDetails.Name)
                    count  ;
                else continue;
                if (myRecord.Company == myDetails.Company)
                    count  ;
                else continue;
                
                if (myRecord.Region == myDetails.Region)
                    count  ;
                else continue;
                if (myRecord.Salary == myDetails.Salary)
                    count  ;
                else continue;
                if (myRecord.HRA == myDetails.HRA)
                    count  ;
                else continue;
                if (myRecord.Basic == myDetails.Basic)
                    count  ;
                else continue;
                if (myRecord.PF == myDetails.PF)
                    count  ;
                else continue;

                if (count == 7)
                    return i;
            }
            return -1;


        }

        private void SubmitExecute1(object parameter)
        {
            Records.Remove((Details)parameter);

        }
        private bool CanSubmitExecute1(object parameter)
        {
            if (string.IsNullOrEmpty(Record.Name) || string.IsNullOrEmpty(Record.Company))
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        private ICommand _SubmitCommand2;
        public ICommand SubmitCommand2
        {
            get
            {
                if (_SubmitCommand2 == null)
                {
                    _SubmitCommand2 = new RelayCommand(SubmitExecute2, CanSubmitExecute2, false);
                }
                return _SubmitCommand2;
            }
        }


        private void SubmitExecute2(object parameter)
        {
            
            

        }
        private bool CanSubmitExecute2(object parameter)
        {
            if (string.IsNullOrEmpty(Record.Name) || string.IsNullOrEmpty(Record.Company))
            {
                return false;
            }
            else
            {
                return true;
            }
        }


        public event PropertyChangedEventHandler PropertyChanged;
        protected void NotifyPropertyChanged(string de)
        {
            
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(de));

        }

       


    
     }
}

中繼命令.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;

namespace Assignment_2.Commands
{
    class RelayCommand : ICommand
    {
        Action<object> executeAction;
        Func<object, bool> canExecute;
        bool canExecuteCache;


        public RelayCommand(Action<object> executeAction, Func<object, bool> canExecute, bool canExecuteCache)
        {
            this.canExecute = canExecute;
            this.executeAction = executeAction;
            canExecuteCache = canExecuteCache;
        }

        public bool CanExecute(object parameter)
        {
            if (canExecute == null)
            {
                return true;

            }
            else
            {
                return canExecute(parameter);
            }
        }

        public event EventHandler CanExecuteChanged
        {
            add
            {

                CommandManager.RequerySuggested  = value;

            }
            remove
            {

                CommandManager.RequerySuggested -= value;

            }
        }

        public void Execute(object parameter)
        {
            executeAction(parameter);
        }
    }
}

主視窗.xaml

<Window x:Class="Assignment_2.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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:vm="clr-namespace:Assignment_2.ViewModel"  

        Title="MainWindow" Height="401" Width="472">

    <Window.Resources>
        <vm:DetailsViewModel x:Key="DetailsViewModel"/>

    </Window.Resources>
    <Grid DataContext="{Binding Source={StaticResource DetailsViewModel}}" RenderTransformOrigin="0.5,0.5" Margin="0,0,1,1">
        <Grid.RenderTransform>
            <TransformGroup>
                <ScaleTransform/>
                <SkewTransform/>
                <RotateTransform Angle="-0.21"/>
                <TranslateTransform/>
            </TransformGroup>
        </Grid.RenderTransform>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="20.59"/>
            <RowDefinition Height="22.906"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="29*"/>
            <RowDefinition Height="293*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <TextBlock Grid.Row="0" Text=" Name" HorizontalAlignment="Center" Margin="0,0,0,4" Grid.RowSpan="2" Width="35" />
        <TextBox Grid.Column="1" Width="100" HorizontalAlignment="Left" Text="{Binding Record.Name,UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Margin="2,0,0,1" Grid.RowSpan="2"/>
        <TextBlock Text="Company" HorizontalAlignment="Center" Margin="0,2,0,3" Width="51" Grid.RowSpan="2" Grid.Row="1"/>
        <TextBox Grid.Column="1" Width="100" HorizontalAlignment="Left" Text="{Binding Record.Company,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" Margin="2,2,0,1" Grid.Row="1"/>
        <TextBlock Grid.Row="2" Text="Region" HorizontalAlignment="Center" Margin="0,1,0,4" Width="37"/>
        <TextBox Grid.Row="2" Grid.Column="1" Width="100" HorizontalAlignment="Left" Text="{Binding Record.Region,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" Margin="3,1,0,4"/>
        <TextBlock Grid.Column="1" Text="HRA" HorizontalAlignment="Left" Margin="131,-1,0,2" Width="23"/>
        <TextBox Grid.Column="1" Width="83" HorizontalAlignment="Left" Text="{Binding Record.HRA,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" Margin="162,0,0,1"/>
        <TextBlock Grid.Column="1" Text="Basic" HorizontalAlignment="Left" Margin="129,2,0,13" Width="26" Grid.RowSpan="2" Grid.Row="1"/>
        <TextBox Grid.Column="1" Width="81" HorizontalAlignment="Left" Text="{Binding Record.Basic,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" Margin="162,2,0,3" Grid.Row="1"/>
        <TextBlock Grid.Row="2" Grid.Column="1" Text="PF" HorizontalAlignment="Left" Margin="144,1,0,5" Width="12"/>
        <TextBox Grid.Row="2" Grid.Column="1" Width="100" HorizontalAlignment="Left" Text="{Binding Record.PF,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" Margin="162,2,0,1"/>
        <TextBlock Grid.Column="1" Text="Salary" HorizontalAlignment="Left" Margin="268,-1,0,1" Width="36"/>
        <TextBox Grid.Column="1" Width="100" HorizontalAlignment="Left" Text="{Binding Record.Salary,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" Margin="304,0,0,21" Grid.RowSpan="2"/>
        <Button Content="Add" Command="{Binding SubmitCommand }" HorizontalAlignment="Left" Grid.Row="4" Margin="121,4,0,5" Width="44" Grid.Column="1"/>



        <ListView x:Name="ListedView" ItemsSource="{Binding Records}" Width="Auto" Grid.Row="5" Margin="38,3,13,36" Grid.ColumnSpan="2">

            <ListView.View >

                <GridView >
                    <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" Width="Auto" />
                    <GridViewColumn  Header="Company" DisplayMemberBinding="{Binding Company}" Width="Auto"/>
                    <GridViewColumn  Header="Region" DisplayMemberBinding="{Binding Region}" Width="Auto" />
                    <GridViewColumn  Header="HRA" DisplayMemberBinding="{Binding HRA}" Width="Auto" />
                    <GridViewColumn  Header="Basic" DisplayMemberBinding="{Binding Basic}" Width="Auto" />
                    <GridViewColumn  Header="PF" DisplayMemberBinding="{Binding PF}" Width="Auto" />
                    <GridViewColumn  Header="Salary" DisplayMemberBinding="{Binding Salary}" Width="Auto" />
                    <GridViewColumn>
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <Button Content="Remove" Margin="1,36,50,150" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListView},Path=DataContext.SubmitCommand1}"/>

                              
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>

在這方面的任何幫助表示贊賞。謝謝

uj5u.com熱心網友回復:

如果我正確理解您的問題,您應該系結 的SelectedItem屬性,ListView以便能夠在TextBox上方的元素中編輯當前選定的專案ListView

<ListView SelectedItem="{Binding Record}" ... />

uj5u.com熱心網友回復:

有或沒有 Binding 你可以這樣做:

if ((sender as ListView).SelectedValue != null)
   {
       string item = (sender as ListView).SelectedValue.ToString();
       SelectedIndex = (sender as ListView).SelectedIndex;
       list.Items[SelectedIndex] = "Updated";
   }

(我喜歡在我的 ListViewItems 上添加一個 ContextMenu,以便用戶更容易修改指定的單擊項):

<ListView x:Name="list">
   <ListView.ContextMenu>
      <ContextMenu x:Name="contextmenu">
         <MenuItem x:Name="Add" Header="Add" Click="Add_Click"/>
         <MenuItem x:Name="Del" Header="Delete" Click="Del_Click"/>
         <MenuItem x:Name="Update" Header="Update" Click="Update_Click"/>
       </ContextMenu>
   </ListView.ContextMenu>
</ListView>

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/423093.html

標籤:

上一篇:如何將ObservableCollections系結到TreeView并顯示相應的視圖?

下一篇:WPFMaterialDesignFilledComboBox-垂直居中提示文本

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more