2016-06-06 55 views
0

我想將一個stackpanel中的某些文本框的Visibility屬性綁定到使用MVVM的WPF複選框的IsChecked屬性。爲此,我創建了一個屬性,IsBoxChecked作爲布爾與私人支持字段_isBoxChecked這兩個文本框和複選框都綁定到。當我運行該程序時,無論我將屬性初始化爲什麼值,具有綁定可見性屬性的文本框都會自動摺疊。另外,如果我在構造函數中將屬性初始化爲true,則複選框不會顯示。這是代碼。綁定複選框被檢查到堆棧面板可見性

 <StackPanel Grid.Column="0" 
       Margin="10,37" 
       HorizontalAlignment="Right" 
       VerticalAlignment="Top"> 
     <TextBlock Text="Always Visible" Margin="5"/> 
     <TextBlock Text="Also Always Visible" Margin="5"/> 
     <TextBlock Text="Needs to Hide and Unhide" Margin="5" Visibility="{Binding IsBoxChecked, Converter={StaticResource BoolToVis}}"/> 
     <CheckBox Content="Text" IsChecked="{Binding IsBoxChecked, Mode=TwoWay}" Margin="5"/> 

    </StackPanel> 

這是我的ViewModel。

Public Class NewSpringViewModel 
Implements INotifyPropertyChanged 

Private _newWindow As NewView 
Private _isBoxChecked As Boolean 

Public Sub New() 

    _newWindow = New NewView 
    _newWindow.DataContext = Me 
    _newWindow.Show() 

    IsBoxChecked = True 

End Sub 

Public Property IsBoxChecked As Boolean 
    Get 
     Return _isBoxChecked 
    End Get 
    Set(value As Boolean) 
     _isBoxChecked = value 
     OnPropertyChanged("IsBoxChecked") 
    End Set 
End Property 

Private Sub OnPropertyChanged(PropertyName As String) 
    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("PropertyName")) 
End Sub 

Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged 
End Class 

綁定到屬性的複選框可以正常運行。如果我在設置了IsBox Checked屬性的setter上設置了一個斷點,則如果選中或取消選中該框,調試器將中斷。

感謝您的任何幫助。

喬恩

回答

0

不知道VB語法,但應該不是這個

RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("PropertyName")) 

改爲

RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(PropertyName)) 

那會解釋爲什麼沒有通知。傳遞參數,而不是一個常量字符串

也可以TextBlock的能見度直接綁定到財產器isChecked(參考複選框通過的ElementName)

<StackPanel Grid.Column="0" 
     Margin="10,37" 
     HorizontalAlignment="Right" 
     VerticalAlignment="Top"> 
    <TextBlock Text="Always Visible" Margin="5"/> 
    <TextBlock Text="Also Always Visible" Margin="5"/> 
    <TextBlock Text="Needs to Hide and Unhide" Margin="5" 
       Visibility="{Binding IsChecked, ElementName=chk, Converter={StaticResource BoolToVis}}"/> 
    <CheckBox Content="Text" Name="chk" Margin="5"/> 
</StackPanel> 
+0

感謝這麼多!愚蠢的錯誤...我喜歡這個建議,以更好地完成XAML。現在完美運作。 –