2012-08-15 26 views
0

我已經將一些按鈕的可見性綁定到了布爾,但是當布爾更改時,按鈕的可見性不會改變。爲什麼會這樣呢?爲什麼我的UI不更新以反映我綁定的數據?

布爾被設置爲這樣:

public static readonly DependencyProperty editModeToggle = DependencyProperty.Register("editMode", typeof(bool), typeof(Window)); 
public bool EditMode 
{ 
    get { return(bool)GetValue(editModeToggle); } 
    set { SetValue(editModeToggle, value); } 
} 

我敢肯定的結合是沒有過錯的。

[注意:我已經設置了一個可以工作的轉換器和綁定工程。能見度只是當我從真更改爲false,反之亦然]

綁定並沒有改變:

<Button Content="Test" Visibility="{Binding ElementName=mainWindow, Path=EditMode, Converter={StaticResource BooltoVisibilityConverter}/> 
+0

1)bool屬性是否使用INotifyPropertyChanged通知更改? 2)你使用轉換器從布爾轉換爲可見性? 3)您是否在輸出窗口中看到任何綁定錯誤? 4)你有沒有嘗試把綁定放在xaml或布爾在布爾屬性中的斷點? – decyclone 2012-08-15 06:59:29

+0

@decyclone我還沒有做第一個......我該怎麼做? – Glowx13 2012-08-15 07:00:16

+1

也許「editMode」或者它只是一個錯字? – Zabavsky 2012-08-15 07:00:41

回答

0

相關產權登記是不正確的 -

public static readonly DependencyProperty editModeToggle = 
DependencyProperty.Register("editMode", typeof(bool), typeof(Window)); 

應該是─

public static readonly DependencyProperty editModeToggle = 
    DependencyProperty.Register("EditMode", typeof(bool), typeof(Window)); 

通知財產的拼寫 - 'E'應該是資本,因爲它的大小寫敏感的,你的屬性名稱不EditModeeditMode

+0

哎呀...不錯的皮卡。謝謝 – Glowx13 2012-08-15 07:55:35

1

有你需要檢查時綁定不能按預期工作幾件事情:

  1. bool屬性是否使用 通知更改INotifyPropertyChanged?
  2. 你使用轉換器從 bool轉換爲Visibility?
  3. 您是否在輸出 窗口中看到任何綁定錯誤?
  4. 你有沒有試過在xaml 或bool屬性中設置綁定的斷點?

正如您在評論中提到的,您尚未實施INotifyPropertyChanged接口。

無論何時ViewModel中的屬性值發生變化,都需要實現該接口,因此綁定的方法就知道了。因此,在對每個媒體資源執行INotifyPropertyChanged之後,您將提高其中包含媒體資源名稱的PropertyChanged事件。這樣,綁定知道該屬性的值已更改。

網上有很多文章。這裏有一個讓你開始的地方:INotifyPropertyChanged and WPF

+0

考慮到布爾屬性是窗口類的一部分,你如何建議我實現INotifyPropertyChanged? – Glowx13 2012-08-15 07:45:46

+0

好吧,對於依賴屬性,你不需要那個。您是否嘗試過直接在綁定上以及在* BooltoVisibilityConverter *的方法中放置斷點? – decyclone 2012-08-15 07:56:53

+0

它最終只是一個我找不到的拼寫錯誤...謝謝! – Glowx13 2012-08-15 07:58:30

0

在這種情況下,你不需要點1從decyclone列表,因爲你正在使用一個依賴項屬性。我認爲如果你沒有它,你應該添加Mode = TwoWay來解決它。

+0

是不是,但無論如何感謝! – Glowx13 2012-08-15 07:58:58

相關問題