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