根据 propertychange 更新 rowstyleselector
Update rowstyleselector based on propertychange
我正在使用 RowStyleSelector 根据项目为我的 Datagridrow 着色。它在绘制行时工作正常,但在 属性 更改项目时不会触发它。由于 inotifyPropertyChange,项目的值显示在数据网格中。
ListViewFileList.RowStyleSelector= new ErrorStyleSelector();
enter code here
private class ErrorStyleSelector : StyleSelector
{
public override Style SelectStyle(object item, DependencyObject container)
{
if (item is myFile)
{
if ((item as myFile).ErrorStatus.IsErrorfile())
{
Style st = new Style(typeof(DataGridRow));
st.Setters.Add(new Setter(BackgroundProperty, Brushes.Red));
return st;}
}
}
我想在项目更改时触发 RowStyleSelector。不使用 xaml.
编辑
我最终使用了 IvalueConverter
Style st = new Style(typeof(DataGridRow));
DataTrigger tig = new DataTrigger()
{
Binding = new Binding(nameof(myFile.ErrorStatus))
{
Converter = new ConverterError(),
}
};
st.Triggers.Add(tig);
ListViewFileList.RowStyle = st;
private class ConverterError : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
TRCFile obj = value as myError;
if (obj!= null && othercondition)
{
Style st = new Style(typeof(DataGridRow));
return st;
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
引发 PropertyChanged
事件时,StyleSelector
不会创建新样式。
您应该将 IsErrorfile()
设为 public 属性 并使用 Style
:
中的 DataTrigger
绑定到它
myFile myFile = item as myFile;
if(myFile != null)
{
Style st = new Style(typeof(DataGridRow));
DataTrigger dataTrigger = new DataTrigger()
{
Binding = new Binding("ErrorStatus.IsErrorfile"),
Value = true
};
dataTrigger.Setters.Add(new Setter(BackgroundProperty, Brushes.Red));
st.Triggers.Add(dataTrigger);
return st;
}
我正在使用 RowStyleSelector 根据项目为我的 Datagridrow 着色。它在绘制行时工作正常,但在 属性 更改项目时不会触发它。由于 inotifyPropertyChange,项目的值显示在数据网格中。
ListViewFileList.RowStyleSelector= new ErrorStyleSelector();
enter code here
private class ErrorStyleSelector : StyleSelector
{
public override Style SelectStyle(object item, DependencyObject container)
{
if (item is myFile)
{
if ((item as myFile).ErrorStatus.IsErrorfile())
{
Style st = new Style(typeof(DataGridRow));
st.Setters.Add(new Setter(BackgroundProperty, Brushes.Red));
return st;}
}
}
我想在项目更改时触发 RowStyleSelector。不使用 xaml.
编辑
我最终使用了 IvalueConverter
Style st = new Style(typeof(DataGridRow));
DataTrigger tig = new DataTrigger()
{
Binding = new Binding(nameof(myFile.ErrorStatus))
{
Converter = new ConverterError(),
}
};
st.Triggers.Add(tig);
ListViewFileList.RowStyle = st;
private class ConverterError : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
TRCFile obj = value as myError;
if (obj!= null && othercondition)
{
Style st = new Style(typeof(DataGridRow));
return st;
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
引发 PropertyChanged
事件时,StyleSelector
不会创建新样式。
您应该将 IsErrorfile()
设为 public 属性 并使用 Style
:
DataTrigger
绑定到它
myFile myFile = item as myFile;
if(myFile != null)
{
Style st = new Style(typeof(DataGridRow));
DataTrigger dataTrigger = new DataTrigger()
{
Binding = new Binding("ErrorStatus.IsErrorfile"),
Value = true
};
dataTrigger.Setters.Add(new Setter(BackgroundProperty, Brushes.Red));
st.Triggers.Add(dataTrigger);
return st;
}