我试图根据 bool 属性更改文本块的前景色,单击按钮时其值会更改。但是,由于某种原因,这不起作用。另外,我是否必须首先将 bool 属性添加到列表中?我尝试将 bool 属性直接添加到 DataContext,但这也不起作用。任何帮助,将不胜感激。
public static bool IsOn { get; set; }
public static List<bool> boo;
private void Button_Click(object sender, RoutedEventArgs e)
{
IsOn = true;
boo = new List<bool>();
boo.Add(IsOn);
DataContext = boo;
}
<Window.Resources>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="Green" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsOn}" Value="true">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<StackPanel>
<Button Click="Button_Click" Content="Change Color" />
<TextBlock Name="textBlockColor" Text="My Foreground Color" />
</StackPanel>
首先你的班级必须实现INotifyPropertyChanged
(msdn http://msdn.microsoft.com/en-US/library/system.componentmodel.inotifypropertychanged.aspx) 通知视图您的财产已更改。
其次你必须分配DataContext
in MainWindow
构造函数。
Example:
public partial class MainWindow : Window, INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}
private bool _isOn;
public bool IsOn
{
get { return _isOn; }
set { _isOn = value; OnPropertyChanged("IsOn"); }
}
private void Button_Click(object sender, RoutedEventArgs e)
{
IsOn = !IsOn;
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propName));
}
}
您的 XAML 代码没问题。
当您的绑定不起作用时,您应该使用snoop http://snoopwpf.codeplex.com/将来。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)