4

我的 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并使用 a BooleanToVisibilityConverter,我也尝试过,但结果是一样的。

我真的不明白我做错了什么。

4

3 回答 3

5

你的 xml 代码应该是

<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 ");}
}
于 2013-10-29T06:26:00.293 回答
3

检查这些链接:

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

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

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

于 2013-10-28T21:41:07.237 回答
1

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

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

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

如果您需要有关转换器的工作示例,请告诉我。

于 2013-10-29T19:16:20.660 回答