为什么我写的程序WPF 绑定后不能更新数据? 200
点击一个按钮,修改label的背景颜色。刚绑定上时可以变为Colors.Red,但是点击按钮没反应。跟踪发现PropertyChanged总是为空。不知道什么回事?pub...
点击一个按钮,修改label的背景颜色。
刚绑定上时可以变为Colors.Red,但是点击按钮没反应。
跟踪发现PropertyChanged 总是为空。不知道什么回事?
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
clsColorStyle ccs = new clsColorStyle();
private void Window_Loaded(object sender, RoutedEventArgs e)
{
ccs.scb = new SolidColorBrush(Colors.Red);
label1.SetBinding(Label.BackgroundProperty, new Binding(){ Source = ccs.scb });
}
private void button3_Click(object sender, RoutedEventArgs e)
{
ccs.scb = new SolidColorBrush(Colors.Goldenrod);
}
}
public class clsColorStyle : INotifyPropertyChanged
{
SolidColorBrush _scb = new SolidColorBrush(Colors.RoyalBlue);
public SolidColorBrush scb
{
get { return _scb; }
set
{
if (_scb != value)
{
_scb = value;
OnChanged("scb");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
} 展开
刚绑定上时可以变为Colors.Red,但是点击按钮没反应。
跟踪发现PropertyChanged 总是为空。不知道什么回事?
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
clsColorStyle ccs = new clsColorStyle();
private void Window_Loaded(object sender, RoutedEventArgs e)
{
ccs.scb = new SolidColorBrush(Colors.Red);
label1.SetBinding(Label.BackgroundProperty, new Binding(){ Source = ccs.scb });
}
private void button3_Click(object sender, RoutedEventArgs e)
{
ccs.scb = new SolidColorBrush(Colors.Goldenrod);
}
}
public class clsColorStyle : INotifyPropertyChanged
{
SolidColorBrush _scb = new SolidColorBrush(Colors.RoyalBlue);
public SolidColorBrush scb
{
get { return _scb; }
set
{
if (_scb != value)
{
_scb = value;
OnChanged("scb");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
} 展开
3个回答
展开全部
应该是你后台属性绑定代码写错了。其实clsColorStyle类可以放在Resource里让前台的控件引用。
比如可以放在Window.Resources里,<local:clsColorStyle x:Key="clsColorStyle"/>
然后label去绑定
<Label Name="label1" Height="25" Width="50" Background="{Binding Source={StaticResource clsColorStyle}, Path=scb}" />
后台的按钮事件里这样写
private void button1_Click(object sender, RoutedEventArgs e)
{
(Resources["clsColorStyle"] as clsColorStyle).scb = new SolidColorBrush(Colors.Goldenrod);
}
比如可以放在Window.Resources里,<local:clsColorStyle x:Key="clsColorStyle"/>
然后label去绑定
<Label Name="label1" Height="25" Width="50" Background="{Binding Source={StaticResource clsColorStyle}, Path=scb}" />
后台的按钮事件里这样写
private void button1_Click(object sender, RoutedEventArgs e)
{
(Resources["clsColorStyle"] as clsColorStyle).scb = new SolidColorBrush(Colors.Goldenrod);
}
展开全部
答案:用法错了。
1、如果你想跟你现在的用法一样,那么每次改变模型的属性时都要重新绑定。也就是你的button3也要和加载时的用法一样:
2、如果你只想改变模型属性不用管绑定,那就在xaml中一次性绑定好。
1、如果你想跟你现在的用法一样,那么每次改变模型的属性时都要重新绑定。也就是你的button3也要和加载时的用法一样:
2、如果你只想改变模型属性不用管绑定,那就在xaml中一次性绑定好。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
假如你你现在跟你用的一样的花,每次都要改变模型的属性时都要重新绑定一下,也就是你的BUTTON3也要和加载的用法一样。
假如你想改变模型属性不用关心绑定,在XAML中一次行绑定好。还要函数上加
grid1.DataContext = ccs;
假如你想改变模型属性不用关心绑定,在XAML中一次行绑定好。还要函数上加
grid1.DataContext = ccs;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询