C# 绑定可见性属性

C# 绑定可见性属性,c#,xaml,data-binding,windows-phone,visibility,C#,Xaml,Data Binding,Windows Phone,Visibility,关于这一点,我已经问了好几个问题,但没有得到正确的答案。我不知道下面的代码哪里出了问题。我正在绑定TextBlock的可见性属性,但它不工作。这是我的xaml代码,我正在更改按钮单击中textblock的可见性属性 <TextBlock Visibility="{Binding IsVisible}" Text="Visibility Sample" Margin="12,40" HorizontalAlignment="Center" Name="visibilityTextblock"

关于这一点,我已经问了好几个问题,但没有得到正确的答案。我不知道下面的代码哪里出了问题。我正在绑定TextBlock的可见性属性,但它不工作。这是我的xaml代码,我正在更改按钮单击中textblock的可见性属性

<TextBlock Visibility="{Binding IsVisible}" Text="Visibility Sample" Margin="12,40" HorizontalAlignment="Center" Name="visibilityTextblock"/>
<Button Content="visibility" Tap="Button_Tap_1"/>
这是我的
IsVisible
属性

private Visibility _isVisible;
public Visibility IsVisible
    {
        get
        {
            return _isVisible;
        }
        set
        {
            _isVisible = value;
            NotifyPropertyChanged("IsVisible");                
        }
    }
最后是我的
NotifyPropertyChanged
方法

#region NotifyPropertyChanged

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(string p)
    {
        if (PropertyChanged == null)
            return;
        PropertyChanged(this, new PropertyChangedEventArgs(p));
    }

#endregion
默认情况下,am通过更改其属性将Textblock可见性初始化为折叠,如

IsVisible = Visibility.Collapsed; ( in the constructor)

我还从
INotifyPropertyChanged
接口派生,并在同一个类文件中实现所有这些。谁能告诉我哪里错了吗?

看到你的答案,我几乎可以肯定你没有很好地实现InotifyProperty更改。下面是一个基于您的问题的示例(有效=):

Windows:XAML

<Window x:Class="WpfApplication7.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TextBlock Visibility="{Binding IsVisible}" Text="Visibility Sample" Margin="12,40" HorizontalAlignment="Center" Name="visibilityTextblock"/>
        <Button Content="Button" Name="boutontest" HorizontalAlignment="Left" Margin="216,247,0,0" VerticalAlignment="Top" Width="74"/>
    </Grid>
</Window>
namespace WpfApplication7
{
    class MainViewModel : ViewModelBase
    {
        private MainWindow mainWindow;

        private Visibility _isVisible = Visibility.Collapsed;
        public Visibility IsVisible
        {
            get
            {
                return _isVisible;
            }
            set
            {
                _isVisible = value;
                OnPropertyChanged("IsVisible");
            }
        }

        public MainViewModel(MainWindow mainWindow)
        {
            this.mainWindow = mainWindow;

            mainWindow.boutontest.Click += BoutonClick;
        }

        private void BoutonClick(object sender, RoutedEventArgs e)
        {
            IsVisible = Visibility.Visible;
        }
    }
}
实施INotifyPropertyChanged

namespace WpfApplication7
{
    public abstract class ViewModelBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propertyName)
        {
            if (this.PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}

您的代码适合我,请确保您的绑定工作正常(您是否定义了windows的datacontext?)。(例如:尝试将字符串绑定到文本框的text属性)您的
文本框的
DataContext
是什么?(试着设置
Text=“{Binding}”
来查看)@Antoine和har07,正如大家所说,将字符串绑定到textblock的Text属性很好。但我无法在运行时更改text属性。例如,我在单击按钮时为该属性指定了另一个字符串,并且该字符串不会更改。NotifyPropertyChanged有什么问题吗?在保留断点时,我可以看到在单击按钮后PropertyChanged值仍然为空。您是完美的。它工作正常,但是你能更清楚地解释一下吗,为什么我的代码不工作?你忘了在你的类名后面添加“:INotifyPropertyChanged”吗?是的,我添加了。但是我从两个基类派生我的新()页,一个是INotifyPropertyChanged。像这样,新建:PhoneApplicationPage,INotifyPropertyChanged
namespace WpfApplication7
{
    class MainViewModel : ViewModelBase
    {
        private MainWindow mainWindow;

        private Visibility _isVisible = Visibility.Collapsed;
        public Visibility IsVisible
        {
            get
            {
                return _isVisible;
            }
            set
            {
                _isVisible = value;
                OnPropertyChanged("IsVisible");
            }
        }

        public MainViewModel(MainWindow mainWindow)
        {
            this.mainWindow = mainWindow;

            mainWindow.boutontest.Click += BoutonClick;
        }

        private void BoutonClick(object sender, RoutedEventArgs e)
        {
            IsVisible = Visibility.Visible;
        }
    }
}
namespace WpfApplication7
{
    public abstract class ViewModelBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propertyName)
        {
            if (this.PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}