按钮可见性绑定不会更新

时间:2013-10-28 21:30:48

标签: wpf vb.net xaml mvvm

我的Xaml页面上有一个按钮,它的可见性绑定到视图模型中Type:SYSTEM.Windows.Visibility的变量,第一次加载页面时是否将变量设置为Hidden或Visible,它工作正常。但是当我将变量更改为其他状态时,我做了一些操作,我的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,我也试过了,但结果是一样的。

我真的不明白我做错了。

3 个答案:

答案 0 :(得分: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"/>

并且您的Viewmodel代码应该是

  private Visibility _isVisible ;

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

答案 1 :(得分:3)

检查这些链接:

http://msdn.microsoft.com/en-us/library/ms743695.aspx

http://www.daedtech.com/wpf-and-notifying-property-change

通过实现INotifyPropertyChanged接口告诉您的视图已更改属性。

答案 2 :(得分:1)

您需要在公共属性的setter中触发OnPropertyChanged()事件,以通知您对UI的更改。查看代码,我似乎错过了OnPorpertyChanged()事件实现。

另一种方法可以是布尔值。而不是make Visibility属性,创建一个Boolean属性并编写一个名为“BooleanToVisibility”的转换器,它将转换“Visibility”依赖属性的值。

在ResourceDictionary中将Converter定义为静态资源,然后您可以在整个应用程序中使用它。转换器方法可以避免在每个视图模型中重写显示/隐藏逻辑。

如果您需要转换器上的工作示例,请与我们联系。