【发布时间】:2011-06-18 05:11:58
【问题描述】:
我有一些属性实现了 INotifyPropertyChanged 接口。它工作正常。但在我的代码中,我还使用了一些值转换器(如果值 3 且值
问题是PropertyChanged 提出后如何刷新值转换器? 解决方案背后是否有简单的代码? 谢谢大家,对不起我的英语不好!
这里有一些代码:
public class NotifyColors : INotifyPropertyChanged
{
private Color _TodayColor;
public Color TodayColor
{
get
{
return _TodayColor;
}
set
{
if (_TodayColor != value)
{
_TodayColor = value;
OnPropertyChanged("TodayColor");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
// it raised correctly when I change color with color picker control
}
}
}
// here is value converter
[ValueConversion(typeof(object), typeof(Brush))]
public class PositionToBackgroundConverter : IValueConverter
{
ModulePreferences ModulePrefs;
public PositionToBackgroundConverter(ModulePreferences ModulePrefs)
{
this.ModulePrefs = ModulePrefs;
}
#region IValueConverter Member
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (ModulePrefs.UseColoringByPosition)
{
try
{
if (value != null)
{
short value_short = (short)value;
if (value_short <= 3)
return (Brush)new SolidColorBrush(ModulePrefs.NotifyColorsObj._TodayColor); // here is changing property
else
return (Brush)new SolidColorBrush(ModulePrefs.NotifyColorsObj.T100PlusColor);
}
else
return Brushes.Transparent;
}
catch
{
return Brushes.Transparent;
}
}
else
return Brushes.Transparent;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
#endregion
}
在这里我将我的值转换器应用于网格:
// assign backgroundconverter
var grid = new FrameworkElementFactory(typeof(Grid));
bin = new Binding();
bin.Path = new PropertyPath(string.Format("DataItem.{0}", LastPositionColumnName));
bin.Converter = new PositionToBackgroundConverter(ProjectViewObj.ModulePrefs);
grid.SetValue(Grid.BackgroundProperty, bin);
【问题讨论】:
-
发布一些代码、显示您的值转换器、显示 XAML 绑定以及引发属性的代码可能会有所帮助。
-
正确引发了属性更改事件(我可以通过断点看到它)。
-
我敢打赌,当您在调试器中运行此程序时,输出窗口中会显示绑定错误。如果您查看这些错误并仔细阅读它们,它们会告诉您绑定试图做什么,这几乎肯定与您认为的不一样。
标签: wpf binding inotifypropertychanged ivalueconverter