2013-10-28 153 views
2

我的Xaml頁面上有一個按鈕,它的可見性綁定到視圖模型中的Type:SYSTEM.Windows.Visibility變量,首次加載頁面時是否將變量設置爲Hidden或可見,它工作正常。但是當我將變量更改爲其他狀態時,我做了一些操作,我的GUI不更新。按鈕可見性綁定不更新

這裏是我的XAML和MVVM

<Button Content="Extend" Name="btnExtend" Command="{Binding ExtendCommand}" Visibility="{Binding isVisible}" Grid.Row="2" Grid.Column="2" HorizontalAlignment="Right" Width="80" Margin="0,0,100,0" Height="25"/> 

和視圖模型:

Public Property isVisible As System.Windows.Visibility 

Public Sub New() 
     isVisible = System.Windows.Visibility.Visible 
End Sub 

Public Sub diable() 
     isVisible = System.Windows.Visibility.Visible 
End Sub 

我在一些議題讀取到變量更改爲Boolean並使用BooleanToVisibilityConverter,我想這太,但結果是一樣的。

我真的不明白我做錯了什麼。

+0

...哪裏是propertychanged事件被解僱? –

+0

我應該嗎?因爲對於綁定文本或其他屬性,一切正常,沒有任何屬性發生改變。 –

+1

是的,你應該。您必須通知有關已更改財產的視圖。我會通過鏈接發佈你的答案。 –

回答

4

您的XAML代碼應該是

<Button Content="Extend" Name="btnExtend" Command="{Binding ExtendCommand}" Visibility="{Binding isVisible,Mode=Twoway}" Grid.Row="2" Grid.Column="2" HorizontalAlignment="Right" Width="80" Margin="0,0,100,0" Height="25"/> 

和您的視圖模型代碼應該是

private Visibility _isVisible ; 

public Visibility isVisible 
{ 
    get { return _isVisible ;} 
    set { _isVisible = value;RaisePropertyChanged("isVisible ");} 
} 
+0

非常感謝您的回答。 –

1

你需要火在公共setter方法需要一個OnPropertyChanged()事件將更改通知UI。查看你的代碼,我似乎錯過了OnPorpertyChanged()事件的實現。

另一種方法可以是布爾值。創建一個布爾屬性並寫入一個名爲「BooleanToVisibility」的轉換器,它將轉換「可見性」依賴項屬性的值,而不是創建可見性屬性。

將Converter定義爲ResourceDictionary中的靜態資源,然後可以在整個應用程序中使用它。轉換器方法可以避免在每個視圖模型中重寫顯示/隱藏邏輯。

請讓我知道,如果你需要轉換器的工作示例。