2013-10-28 119 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中的静态资源,然后可以在整个应用程序中使用它。转换器方法可以避免在每个视图模型中重写显示/隐藏逻辑。

请让我知道,如果你需要转换器的工作示例。