1. 程式人生 > >WPF Button的屬性 Content繫結字串失敗

WPF Button的屬性 Content繫結字串失敗

對於button的使用一般都不會涉及需要將content屬性做繫結資料的操作。所以在網上也找到的有關資料也比較少。

現在我有一種需要,一個按鈕顯示的Content是根據繫結的字串來的。

最開始我的做法是

 <Grid x:Name="grid">
        <Button x:Name="button" Width="100" Height="30"  Content="{Binding Text}" Click="Button_Click"></Button>
    </Grid>
這個Text就是一個public string Text="xxxxx";

很顯然沒有起任何作用;

改進版的

        private string _Text;
        public string Text
        {
            get { return _Text; }
            set { _Text = value; }
        }

依然不起作用,然後在網上找到的一些資料發現,Content不是string型別,而是object型別,不能直接繫結字串;

接下來的做法是新建一個類,繫結一個類中的資料

 public class ButBindingData 
        {
            public ModelButBindingData()
            {
                Text = "列表模式";
            }
            private string _Text ;
            public string Text
            {
                get { return _Text; }
                set { _Text = value; }
            }
        }
依然無效,於是我在程式碼裡手動寫上了繫結
 Binding binding = new Binding();
            binding.Source = data;
            binding.Path = new PropertyPath("Text");
            button.SetBinding(Button.ContentProperty, binding);
我發現,手動設定這樣的繫結是起作用的,那麼為什麼在xmal裡設定不起作用呢。

左思右想,找了許多資料,發現了被我遺漏的最重要的一點,上下文屬性未設定,那當然找不到要繫結的資料啊

所以最關鍵的一點是

grid.DataContext = data;

那麼xmal裡就可以這樣寫了

  <Grid x:Name="grid">
        <Button x:Name="button" Width="100" Height="30"  Content="{Binding Text}" Click="Button_Click"></Button>
    </Grid>
正確顯示!

為了達到資料及時更新的目的,還需要一些操作:

public class PropertyChangedBase : INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;
            public void Notify(string propertyName)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
                }
            }

        }
        public class ModelButBindingData : PropertyChangedBase
        {
            public ModelButBindingData()
            {
                Text = "666";
            }
            private string _Text ;
            public string Text
            {
                get { return _Text; }
                set { _Text = value; Notify("Text"); }
            }

        }
就是Text這個資料有變更是會及時通知UI主介面更新顯示資料。

當然別忘了資料要

public ModelButBindingData data = new ModelButBindingData();

public屬性,還要new出來。

以上就是實現Button的Content繫結資料的操作。

相關推薦

WPF Button屬性 Content字串失敗

對於button的使用一般都不會涉及需要將content屬性做繫結資料的操作。所以在網上也找到的有關資料也比較少。 現在我有一種需要,一個按鈕顯示的Content是根據繫結的字串來的。 最開始我的做法是 <Grid x:Name="grid">

WPF 自定義控制元件的依賴屬性方法

首先一些人覺得WPF中前臺的程式碼應該在前臺建立,儘量不要在後臺用程式碼建立。另外如果前臺重複程式碼過多,編寫起來非常繁瑣而且修改更是頭痛。因此使用使用者控制元件的方法把經常使用的前臺模組製作成控制元件,當然用法和普通控制元件基本相同。 注意的地方已經用紅色標記,程式碼如下

模擬實現WPF的依賴屬性通知機制(3)--依賴物件

下面是依賴對像類的實現:(注,這裡涉及到INotifyPropertyChanged介面,大家可以參考MSDN文件瞭解).  /// <summary>     /// 依賴對像,主要提供屬性值和屬性繫結的管理。     /// </summary>

3.vue屬性

1.在vue中編寫的內容:     //在使用vue之前必須例項化vue物件 new Vue({     /*el:指element  需要獲取的元素,一定是html中根容器元素         以後所有的操作

面向物件之定製物件獨有屬性+屬性查詢+方法列印day20

1、為物件定製獨有特徵__init__     物件的本質就是一個名稱空間而已,物件名稱空間是用來存放物件自己獨有的名字/屬性,而類中存放的是物件共有的屬性   呼叫時發生兩件事:     a、建立一個空物件stu1     b、自動觸發類中__init__功能執行,將stu1以及呼叫類括號中的引數一同傳入

WPF MVVM單例項解決全域性呼叫問題

對於出入門MVVM模式的人來說,能夠實現Model和View的繫結,但是慢慢的肯定會發現一個問題,那就是如果想在專案其他的類中去給Model的資料賦值或者呼叫Model方法,那就沒得搞啦。 對於這個問題,有一種很不錯的單例項思想能夠完美的解決,話不多說,直接上程式碼: 首

C# wpf 中的資料4-2(15)

同一個資料來源繫結到兩個或多個控制元件上。如我們的示例中把ListBox的選中項繫結到TextBox與TextBlock。 在繫結語法中增加一個 Mode 屬性,即繫結模式。對於我們的示例,我們把TextBlock的繫結語法中的Mode屬性設為 OneWay 。把TextB

MyBatis資料失敗

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'arg0' not found. Ava

WPF —ListView用ItemsSource物件列表

雖然wpf 開發有段時間了,但是對於繫結資料這塊兒,理解的還是不太深入 。 xaml  <ListView Canvas.Left="59" Canvas.Top="170" Height="253" Name="listView1" Width="714"

Angular(五)----屬性資料

@Input裝飾器   在類上新增元資料,讓指令的屬性用於繫結,也稱之為輸入屬性,資料流是從繫結表示式流向指令內容。(1)需要進行import語句指定從Angular的core庫匯入一些符號。  (2)

WPF中關於資料的三種方式及注意細節

前言》 首先,簡單介紹一下,什麼是資料繫結?一種用宣告的方式將控制元件和資料繫結在一起的方式。 簡單來理解一下就是:控制元件的屬性由你繫結的資料來動態判斷的方式。 《核心前提部分》 一個繫結(Binding)關係由四個元件構成:     1

WPF的5種模式(mode)

WPF的繫結模式(mode)是列舉的 列舉值共有5個 1:OneWay(源變就更新目標屬性) 2:TwoWay(源變就更新目標並且目標變就更新源) 3:OneTime(只根據源來設定目標,以後都不會變) 4:OneWayToSource(與OneWay相

WPF自定義treeview事件SelectedItemChanged

1、設定事件繫結到函式TreeUAAddressSpace_SelectedItemChanged  this.treeBrowseUASpace.SelectedItemChanged += new System.Windows.RoutedPropertyChanged

jQuery動態新增li標籤並新增屬性事件

程式碼如下: <%@page import="java.util.ArrayList"%> <%@ page language="java" contentType="text/h

如何使標籤中的 href 屬性動態

一、 <a href='download.aspx?id=<%# Eval("id")%>'> 下載地址</a> download.aspx根據ID查詢檔案下載 或href直接連結檔案 二、 有兩種辦法: 1. 後臺設定公共變數,如: p

androidService失敗原因

今天抄一個程式碼,學習Service,中間Service的繫結一直是失敗的。 bindService返回false 上網查詢的話都是一些,比如說TabHost的問題 發現和自己的問題不一樣。 最後想了想,原來是AndroidManifest.xml這個檔案沒有改,要新增一個

AngularJS 指令中的屬性方式

指令域scope的@<!doctype html> <html ng-app='myApp'> <head> </head> <body> <d

spring boot 接收JSON時發生轉義字元物件失敗

在做Spring boot 專案時發生json轉義字元繫結物件失敗,原因是json裡面有些欄位包括空格,反斜槓等,如果框架沒有對這些json進行轉化時,就會報類似如下錯誤 org.codehaus.

動態遍歷複選框且id名與其label標籤for屬性一一

圖片展示: css程式碼: 注:label標籤定位在複選框上 input[type="checkbox"]{ display: none; } label{ position: relative; display: inline-block;

WPF的ComboBox資料,使用Dictionary作為資料來源

ViewModel //屬性定義      Dictionary<int, string> _selGroupList;         /// <summary>         /// 分組下拉列表         /// </summar