绑定到属性的按钮可见性未更新

时间:2015-11-20 06:22:57

标签: wpf

我有一个类(不是ViewModel),它有一个确定按钮可见性的属性。我已将该类包含在UserControl的资源

<UserControl.Resources>
     <helpers:DialogLayoutConfigInfo x:Key="DialogConfigInfo"/>
     <BooleanToVisibilityConverter x:Key="BoolToVis" />
</UserControl.Resources>

我将按钮的可见性绑定到&#34; DialogLayoutConfigInfo&#34;中的属性。类。

private bool isButtonVisible;
public bool IsButtonVisible
{
   get { return isButtonVisible; }
   set { isButtonVisible= value; OnPropertyChanged("IsButtonVisible"); }
}

<Button Visibility="{Binding Source={StaticResource DialogConfigInfo}, 
Path=IsButtonVisible, Converter={StaticResource BoolToVis}}">

如果我更新属性&#34; IsButtonVisible&#34;在&#34; DialogLayoutConfigInfo&#34;的构造函数中;类,可见性更新。但是当调用构造函数时,我没有XML文件(用于获取设置属性的信息)。所以我稍后调用一个更新属性的函数。如果我在功能中设置可见性,为什么不能更新可见性?

设置属性的函数从我后面的View代码中调用。

2 个答案:

答案 0 :(得分:0)

我认为你应该像这样更新你的DialogLayoutConfigInfo类

public class DialogLayoutConfigInfo : INotifyPropertyChanged
{
    /// <summary>
    /// Property Change Event
    /// </summary>
    public event PropertyChangedEventHandler PropertyChanged;

    /// <summary>
    /// Property Change Method
    /// </summary>
    /// <param name="prop">Property Name</param>
    internal void RaisePropertyChanged(string prop)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(prop));
        }
    }

    public static DialogLayoutConfigInfo instance;

    public DialogLayoutConfigInfo()
    {
        if (instance == null)
        {
            instance = this;
        }

        IsButtonVisible = Visibility.Visible;

    }
    private Visibility isButtonVisible;
    public Visibility IsButtonVisible
    {
        get
        {

            return isButtonVisible;
        }
        set
        {
            isButtonVisible = value;
            this.RaisePropertyChanged("IsButtonVisible");
        }
    }
}

后面的代码应该像

DialogLayoutConfigInfo.instance.IsButtonVisible = Visibility.Collapsed;

答案 1 :(得分:-2)

基本上它是由.Net BooleanToVisibilityConverter中的内置类实现的:

 <UserControl.Resources>
    <BooleanToVisibilityConverter x:Key="booleanVisibilityConverter"/>
</UserControl.Resources>

示例:

XAML:

<Button Content="Hello, I am the button" Visibility="{Binding ShowButton, Converter={StaticResource booleanVisibilityConverter}}"/>

你的班级:

private bool _showButton = false;
public bool ShowButton
{
   get { return _showButton; }
   set
   {
      if (value != _showButton)
      {
         _showButton = value;
         OnPropertyChanged("ShowButton");
      }
   }
}

如果您想更改代码中Visibility的{​​{1}},可以通过ViewModel中的此代码进行设置:

Button

您的情况:

没有必要实施//Show error Message IsButtonVisible = false; ,因为IValueConverter在{strong> .Net <内置BooleanToVisibilityConverter Class时没有Visibility(请参阅上面的示例) / strong>即可。你的情况:

IValueConverter

XAML:

private bool isButtonVisible;
public bool IsButtonVisible
{
    get { return isButtonVisible; }
    set { isButtonVisible= value; OnPropertyChanged("IsButtonVisible"); }
}