2011-06-24 28 views
12

我一直在尋找通過谷歌代碼,啓用和禁用基於文本屬性從一個文本框中的按鈕。如果文本框有一些文本,那麼該按鈕應該被啓用,否則按鈕應該被禁用。取決於WPF中的TextBox Text屬性,啓用/禁用Make按鈕?

我得到了一些代碼,但代碼在XAML但沒有C#。我無法理解它是如何工作的。

請幫我理解下面的代碼的行爲:

<TextBox Name="txtName" Width="100" Height="30"></TextBox> 

<Button Content="Add Name " Width="100" Height="30" 
    IsEnabled="{Binding ElementName=txtName, Path=Text.Length, Mode=OneWay}"/> 

是如何的IsEnabled按鈕物業的工作?如何將true和false設置爲IsEnabled屬性?什麼是路徑?它是如何工作的?

回答

6

articlearticle解釋WPF數據綁定和路徑如何工作。

但是,上面的綁定將監視TextBox上的Text屬性以進行更改。然後它將在Text屬性返回的值上看到Length屬性,該屬性是一個字符串。 Length屬性的值傳遞給IsEnbled屬性。

當您將一個Int32(Length屬性)分配給一個布爾值(IsEnabled屬性)時,該值也必須轉換。這通常是通過類型轉換器完成的,這就是爲什麼上述工作(這讓我感到驚訝)。

UPDATE:

以上不再適用於第一個鏈接,較2008年舊的MSDN雜誌的文章不再是可在網上。儘管如此,它們仍然可以用作CHM文件。該CHM鏈接相關的文章,標題爲 「數據點:在WPF數據綁定」,就是:

http://download.microsoft.com/download/3/a/7/3a7fa450-1f33-41f7-9e6d-3aa95b5a6aea/MSDNMagazine2007_12en-us.chm

從MSDN:

2008年及以上的問題只能作爲.chm文件。在大多數Windows版本中,您必須先將這些文件保存到本地計算機,然後解鎖該文件以便讀取它。要取消屏蔽文件,請右鍵單擊文件,然後選擇屬性,然後選擇「取消屏蔽」按鈕。內容將可供閱讀。

+1

0被轉換爲false,所有內容> = 1爲真,非常有趣。 –

+0

@ H.B。 - 是的,我想到,只是想知道轉換是什麼:-)因爲'bool b = 0;'是無效的。也許綁定本身? – CodeNaked

+0

@CodeNaked:有綁定系統使用的類,它們從TypeConverter繼承。 –

1

向您的視圖模型中添加一個屬性,該屬性計算IsEnabled的值並綁定到該值。

在爲您綁定TextBox.Text值的屬性的setter中,還會觸發IsEnabled屬性的已更改事件。

1

如果你不想使用MVVM /數據綁定你可以:

  1. 你可以一個DataTrigger添加到文本框和禁用的風格/啓用鼠標。

  2. 或者將Button的IsEnabled屬性綁定到TextBox的Text屬性,並使用值轉換器將字符串長度轉換爲布爾值。

2

對的基礎上TextBox內容Button如何禁用一個例子見this post

雖然此方法可行,但最好使用ICommand

響應於評論

ElementName =在XAML控件的名稱,這是我們具有約束力。下面的例子將因此{Binding ElementName=aName}

<TextBox x:Name="aName" /> 

Path =你想要的元素值的屬性路徑。例如,如果您想獲取Text屬性的值,則可以使用{Binding Path=Text}。如果你想獲得Text屬性的長度,你可以使用{Binding Path.Text.Length}等等。

Mode=OneWay =評估綁定的方向。這是解釋here

+0

可以解釋綁定是如何工作的... IsEnabled =「{綁定ElementName = txtName,Path =文本,模式= OneWay,我們總是需要提及Binding ElementName&path。什麼是模式以及它是如何工作的。 plzz解釋 – Mou

1

這是WPF(xaml)中新的綁定語法。

  1. 您綁定到txtName的TextBox控件/元素
  2. 您使用Path指定到u [R試圖綁定到該元素的什麼財產。在這種情況下,您綁定到TextBox的Text屬性,然後是Text的Length屬性。

所以,當文本框是空的。 TextBox.Text.Length = 0這意味着它將被禁用。

只要您輸入任何值,它就會變成> = 0,並將其轉換爲真。

我會強烈建議在嘗試編碼之前閱讀關於WPF中的綁定。 WPF與WinForm組合很不同

+0

可以在這裏解釋綁定是如何工作的... IsEnabled =「{綁定ElementName = txtName,路徑=文本,模式= OneWay,我們總是需要提及Binding ElementName&path。它的工作。plzz解釋。 – Mou