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

WPF綁定與通知屬性到界面

這篇具有很好參考價值的文章主要介紹了WPF綁定與通知屬性到界面。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

綁定與通知屬性到界面

本文同時為b站WPF課程的筆記,相關示例代碼

前言

在上一篇文章C#代碼事件里面,我們介紹了利用給控件命名的方式,在后端代碼中訪問并修改屬性。這樣子直截了當,但是這樣后端代碼依賴于前端。如果前端的代碼變動較大,后端代碼可能要大面積重構。

于是利用綁定的這種方法,將前后端分離,前端只需把需要修改的屬性設置好綁定變量名,后端只需盯著這些變量名進行操作。

這樣還可以實現前后端雙人開發(fā),后端開發(fā)者只需把那些操作的接口名稱告訴前端,讓對方去綁定相應的空間屬性即可。

綁定

控件屬性設置為"{Binding xxxx}"

例如綁定文本框的文字內容到UserName

<TextBox Text="{Binding UserName}" Grid.Row="0" Grid.Column="1" Margin="2"/>

在后端中寫入:

public string UserName { get; set; }

接下來就可以在后端的代碼中直接使用變量UserName。

其中get; set;是自動生成了屬性的訪問器,分別用于獲取屬性的值與修改屬性的值。這是自動實現的屬性,不需要手寫。

可以輸入prop然后按 Tab 鍵兩次,一鍵生成

public int MyProperty { get; set; }

屬性的代碼模板,加快了編寫常見代碼結構的速度。

屬性的初值

假如想要程序剛運行的時候,文本框里就已經有文字,可以給綁定的變量賦值:

public string UserName { get; set; } = "333"

但是運行會發(fā)現,并沒有預期的效果。

可以在窗口的構造函數public MainWindow()中,初始化窗口InitializeComponent();之后,將窗口的 DataContext 設置為窗口本身的實例:

public MainWindow()
{
    InitializeComponent();
    this.DataContext = this;
}

在上面的例子中,UserNameMainWindow 的一個屬性。通過將 DataContext 設置為 this(即 MainWindow 的當前實例),告訴了數據綁定引擎應該在當前的 MainWindow 實例中查找 UserName 屬性。

這樣,在 XAML 中使用 {Binding UserName} 的時候,它能正確地找到 MainWindowUserName 屬性,并將其與 UI 元素關聯起來。

自動更新界面

接下來的后端代碼中,即使對于變量UserName做出了修改,前臺的界面也不會實時的發(fā)生變化。

為了使 WPF 的數據綁定能夠響應屬性值的變化,并自動更新界面,需要實現 INotifyPropertyChanged 接口。這個接口用于通知數據綁定引擎某個屬性的值已經改變,從而引擎可以更新綁定到該屬性的 UI 元素。

以下詳細說明:

實現INotifyPropertyChanged接口

在這個類(上面的例子中是``MainWindow)中實現 INotifyPropertyChanged接口,需要聲明一個PropertyChanged` 事件:

public partial class MainWindow : Window, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
}

定義 RaisePropertyChanged 函數:

private void RaisePropertyChanged(string propertyChanged)
{
    PropertyChangedEventHandler handler = this.PropertyChanged;
    if (handler != null)
        handler(this, new PropertyChangedEventArgs(propertyChanged));
}
  • 這個函數用于觸發(fā) PropertyChanged 事件。
  • 當某個屬性的值被改變時,我們只需要調用這個方法,傳遞屬性的名字作為參數,這樣界面就會發(fā)生更新。

修改屬性以觸發(fā) PropertyChanged 事件

private string _UserName = "333";
public string UserName
{
    get { return _UserName; }
    set
    {
        if (_UserName != value)
        {
            _UserName = value;
            RaisePropertyChanged(nameof(UserName));
        }
    }
}
  • 對于需要綁定的每個屬性,我們就不再使用原本自動實現的屬性(原本的是自動生成的,只需要寫{ get; set; }就行。
  • 而是,首先需要給每個屬性創(chuàng)建一個私有字段(在這個案例中就叫 _UserName)。
  • 在屬性的 set 訪問器中,我們設置字段的值,并且調用 RaisePropertyChanged 方法,可以達到一旦變量改變,就更新界面的效果。

可以輸入propfull然后按 Tab 鍵兩次,一鍵生成以下代碼模板:

private int myVar;

public int MyProperty
{
    get { return myVar; }
    set { myVar = value; }
}

然后可以根據需要修改類型(int)、字段名(myVar)和屬性名(MyProperty)。對于上面的 INotifyPropertyChanged 的情況,還需要在 set 訪問器中添加屬性值變化通知的代碼。

總結

綁定

例如綁定文本框的文字內容到UserName

<TextBox Text="{Binding UserName}"/>

在后端中寫入:

public string UserName { get; set; }

可以輸入prop使用代碼模板。

初值

直接賦值

public string UserName { get; set; }

但是注意將窗口的 DataContext 設置為窗口本身的實例

public MainWindow()
{
    InitializeComponent();
    this.DataContext = this;
}

實時更新

聲明 PropertyChanged 事件:

public partial class MainWindow : Window, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
}

定義 RaisePropertyChanged 函數:

private void RaisePropertyChanged(string propertyChanged)
{
    PropertyChangedEventHandler handler = this.PropertyChanged;
    if (handler != null)
        handler(this, new PropertyChangedEventArgs(propertyChanged));
}

修改屬性觸發(fā)更新事件

private string _UserName = "333";
public string UserName
{
    get { return _UserName; }
    set
    {
        if (_UserName != value)
        {
            _UserName = value;
            RaisePropertyChanged(nameof(UserName));
        }
    }
}

可以輸入propfull使用代碼模板。文章來源地址http://www.zghlxwxcb.cn/news/detail-822405.html

到了這里,關于WPF綁定與通知屬性到界面的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

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

領支付寶紅包贊助服務器費用

相關文章

  • WPF如果未定義綁定的屬性,程序如何處理

    問題 :wpf中, Button IsEnabled=\\\"{Binding IsValid1}\\\"/Button ,如果沒定義綁定的屬性IsValid1,可以正常用嗎 解答 :在 WPF 中,如果沒有定義綁定的屬性 IsValid1,會導致綁定失敗,從而使 Button 的 IsEnabled 屬性無法正常綁定。在這種情況下,Button 的 IsEnabled 屬性將保持默認值,即為 true。

    2024年02月11日
    瀏覽(21)
  • 【WPF】解決無法對“xxx”類型的只讀屬性“xxx”進行TwoWay或OneWayToSource綁定

    System.InvalidOperationException:“無法對“AowisingWincc.ViewModels.DialogScanDevicesViewModel”類型的只讀屬性“IOTGtatewayDeviceId”進行 TwoWay 或 OneWayToSource 綁定?!?這個異常是由于在進行數據綁定時,嘗試將只讀屬性(IOTGtatewayDeviceId)設置為雙向(TwoWay)或者從目標到源(OneWayToSource)的綁

    2024年02月04日
    瀏覽(24)
  • WPF綁定之道:為何選擇屬性而非字段,提升靈活性與可控性

    WPF綁定之道:為何選擇屬性而非字段,提升靈活性與可控性

    ? 概述: WPF支持綁定到對象的屬性而不是字段,主要因為屬性提供了更多控制和擴展性。屬性包含get和set方法,支持數據驗證和通知屬性更改,而字段通常被認為是內部實現。使用屬性使WPF能夠更靈活、可控地與數據交互,提高代碼的可讀性和可維護性。 WPF(Windows Presenta

    2024年03月25日
    瀏覽(23)
  • 界面控件DevExpress WPF屬性網格 - 讓應用輕松顯示編輯各種屬性事件

    界面控件DevExpress WPF屬性網格 - 讓應用輕松顯示編輯各種屬性事件

    DevExpress WPF?Property Grid(屬性網格)靈感來自于Visual Studio,Visual Studio啟發(fā)的屬性窗口(對象檢查器)讓在WPF應用程序顯示和編輯任何對象的屬性和事件變得更容易! P.S :DevExpress WPF擁有120+個控件和庫,將幫助您交付滿足甚至超出企業(yè)需求的高性能業(yè)務應用程序。通過DevExpress

    2024年01月18日
    瀏覽(33)
  • WPF 多值綁定(MultiBinding)與多屬性觸發(fā)器(MultiTrigger)與多數據觸發(fā)器(MultiDataTrigger)

    WPF 多值綁定(MultiBinding)與多屬性觸發(fā)器(MultiTrigger)與多數據觸發(fā)器(MultiDataTrigger)

    當一個控件的某個屬性需要綁定到多個值的時候,需要使用MultiBinding. 例子1 一個文本顯示Person的Name和Age 例子2 當1,2,3都被選中時,下面的紅色框隱藏,不使用后臺代碼邏輯。 這個時候,使用MultiBinding+MultiValueConverter可實現需求 首先定義多值轉換器: XAML如下: 與Trigger屬性對

    2024年02月05日
    瀏覽(24)
  • WPF實戰(zhàn)學習筆記27-全局通知

    新建消息事件 添加文件:Mytodo.Common.Events.MessageModel.cs 注冊、發(fā)送提示消息 UI增加Snackbar 修改文件:Mytodo.Views.MainView.xaml 注冊消息 修改文件:Mytodo.Views.MainViewcs 構造函數添加 要注意的是,我們要發(fā)送的是文本,所以,this.skbar.MessageQueue.Enqueue函數內發(fā)送的是文本。 在需要的地

    2024年02月15日
    瀏覽(17)
  • WPF基礎入門-Class6-WPF通知更改

    WPF基礎入門-Class6-WPF通知更改

    Class6-WPF通知 1、顯示頁面: 頁面cs文件: 2、新建一個 ViewModelBase.cs 文件 3、model文件:其中定義的 Name 和 Title 與 xaml文件 中控件綁定一致 運行效果:

    2024年02月11日
    瀏覽(15)
  • wpf數據綁定之元素、資源、后臺綁定

    wpf數據綁定之元素、資源、后臺綁定

    ? ? ? ? wpf前端的數據綁定主要分為元素、資源以及后臺數據三種,元素可以簡單的理解為前端的空間數據綁定,資源是在resource里找數據,而后臺就是跟cs文件之間的數據互相傳遞。 ? ? ? ? ? 先說下元素吧,也就是控件元素,因為代碼比較簡單,就不上效果了,自己可以

    2024年02月04日
    瀏覽(17)
  • C#WPF通知更改公共類使用實例

    C#WPF通知更改公共類使用實例

    本文實例演示C#WPF通知更改公共類使用實例,通過使用公共類簡化了代碼。其中的代碼中也實現了命令的用法。 定義: INotifyPropertyChanged 接口:用于向客戶端(通常是執(zhí)行綁定的客戶端)發(fā)出某一屬性值已更改的通知 。 首先創(chuàng)建WPF項目,添加按鈕和文本控件 ?

    2024年02月07日
    瀏覽(15)
  • WPF——事件綁定命令

    WPF——事件綁定命令

    我們都知道WPF中的命令在結合MVVM模式的框架使用之后(框架重新實現了ICommand),可以解耦。但并不是所有控件都可以綁定命令的,比如TextBox、ComboBox等。在使用這類控件時,如果你想讓它的某個事件激發(fā)時調用ViewModel中的方法,往往需要把ViewModel中的方法暴露給View,然后在

    2024年02月05日
    瀏覽(95)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包