2016-03-25 26 views
-1

我使用下面的命令來更新GUI按鈕INotifyPropertyChanged的禁用按鈕和CheckBox

PropertyChanged(this, new PropertyChangedEventArgs(resetButton.IsEnabled = false));

但是,我得到一個錯誤`

參數1:無法從「布爾轉換'到 '字符串'

編輯

這個按鈕的XAML代碼,我想單擊時禁用它。

resetButton.IsEnabled = false是我最初試圖用來禁用它。

<Button x:Name="resetButton" 
     Grid.Row="1" 
     HorizontalAlignment="Right" 
     VerticalAlignment="Bottom" 
     Width="80" 
     Content="Reset" 
     Style="{StaticResource BlueButton}" 
     Click="resetButton_Click"/> 
+0

PropertyChangedEventArgs構造函數接受一個字符串作爲參數,其中字符串是已更新屬性的名稱。該名稱應該是繼承INotifyPropertyChanged的類中的一個屬性。然後resetButton.IsEnabled綁定到XAML中的那個。 –

回答

-1

我首先要討論的僅僅是語法錯誤,編譯器抱怨:

您調用

new PropertyChangedEventArgs(resetButton.IsEnabled = false) 

在那裏,表達

resetButton.IsEnabled = false 

將評估爲一個bool。因此,您將bool傳遞給PropertyChangedEventArgs的構造函數。

但是,that constructor預計爲string,即已更改屬性的名稱。現在


,關於預期的結果:

我使用下面的命令來更新GUI

沒有按鈕,你不是。至少,不直接。

什麼你可以使用呼叫PropertyChanged的是火與PropertyChanged事件註冊的任何事件處理程序,然後可以做任何你想讓他們做的,例如更新GUI中的某些內容。

因此,在代碼別的地方,你必須寫這樣的事:

myObject.PropertyChanged += delegate(object sender, PropertyChangedEventArgs e) 
{ 
    resetButton.IsEnabled = false; 
} 

這將創建一個匿名方法並將其註冊爲你的事件處理器。

現在,通常,您還需要檢查PropertyName propertye參數看其中myObject財產實際上已經改變了。

在這裏,我們回到您對事件的解僱:您必須在構造PropertyChangedEventArgs實例時傳入更改屬性的屬性名稱。

如果你的財產是bool類型(或者,如果你有一個適當的value converter轉換任何類型的屬性是bool),你也可以直接在XAML中resetButton.IsEnabled屬性綁定到你的財產。然後,它會自動註冊一個處理程序,並在發動機罩下爲PropertyChanged事件,以便在需要時更新按鈕的啓用狀態。

+0

感謝您的理解的詳細說明。不過,我是XAML的新手,無法弄清楚整個語法。如果你能把它作爲一個整體,我會很感激。 – Imsa

+0

我考慮添加一個XAML片段,該片段也顯示帶有綁定的按鈕......但爲此,我需要知道您的屬性(您正在觸發'PropertyChanged')是否被調用。 –

+0

我更新了問題。謝謝 – Imsa