C# WPF-通过ValueConverter绑定到属性的样式未正确更新
我有一个样式转换器,定义如下:C# WPF-通过ValueConverter绑定到属性的样式未正确更新,c#,wpf,xaml,binding,C#,Wpf,Xaml,Binding,我有一个样式转换器,定义如下: public class StyleConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value is MyStatus && targetType == typeof(S
public class StyleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is MyStatus && targetType == typeof(Style))
{
var status = (MyStatus)value;
switch (status)
{
case MyStatus.First:
return Application.Current.FindResource("firstStyle");
case MyStatus.Second:
return Application.Current.FindResource("secondStyle");
}
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
<Style x:Key="firstStyle" TargetType="Border">
<Setter Property="Background" Value="Yellow" />
</Style>
<Style x:Key="secondStyle" TargetType="Border">
<Setter Property="Background" Value="LightGreen" />
</Style>
在App.xaml
中,我定义了一些样式,如下所示:
public class StyleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is MyStatus && targetType == typeof(Style))
{
var status = (MyStatus)value;
switch (status)
{
case MyStatus.First:
return Application.Current.FindResource("firstStyle");
case MyStatus.Second:
return Application.Current.FindResource("secondStyle");
}
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
<Style x:Key="firstStyle" TargetType="Border">
<Setter Property="Background" Value="Yellow" />
</Style>
<Style x:Key="secondStyle" TargetType="Border">
<Setter Property="Background" Value="LightGreen" />
</Style>
项目
:
public class Item : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged = delegate { };
private MyStatus status;
public MyStatus Status {
get
{
return status;
}
set
{
status = value;
PropertyChanged(this, new PropertyChangedEventArgs("Status"));
}
}
}
我正在将Item
实例添加到绑定到MyItems
的observateCollection
集合中(而MyStatus
是一个简单的枚举)
我的问题是,该样式仅在第一次正确应用,并且在我更改
项的状态
属性
后不会发生更改。我想您正在寻找它。您可以告诉我如何在我的情况下使用它吗?也许您应该调用FindResource(“secondStyle”)代码>而不是FindResource(“secordStyle”)代码>?这只是我简化示例时的一个输入错误。CorrectedId检查状态是否确实更改(例如,通过放置断点)