У меня есть это древовидное представление с иерархией, связанной с моделью структуры сущности.
Прямоугольник ниже работает только для начальной загрузки. И не обновляет свой цвет и т. Д., Когда я запускаю событие Propertyaged.
<HierarchicalDataTemplate ItemsSource="{Binding tblLines}">
<StackPanel Orientation="Horizontal" Margin="2">
<Image Height="15" Margin="4" x:Name="imgTreeProject" Source="/DES STUDIO PR;component/Resources/Images/folder_closed.png"/>
<TextBlock Text="{Binding Name}" Margin ="8" TextAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<Rectangle Name="X" Width="10" Height="10" Fill="{Binding Path=.,Converter={StaticResource CheckoutConverter},UpdateSourceTrigger=PropertyChanged}" ToolTip="{Binding Path=.,Converter={StaticResource CheckoutPersonConverter},UpdateSourceTrigger=PropertyChanged}" ToolTipService.IsEnabled="{Binding Path=.,Converter={StaticResource CheckoutToolTipVis},UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>
Вот мои конвертеры:
public class CheckoutConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is TblBase)
{
var Baseentity = value as TblBase;
if (Baseentity.COID == MainWindow.LocalUser.ID)
{
return Brushes.Green;
}
else if ((Baseentity.COID == 0) || (Baseentity.COID == null))
{
return Brushes.Transparent;
}
else if (Baseentity.COID != 0)
{
return Brushes.Black;
}
}
return Brushes.Black;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
public class CheckoutPersonConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is TblBase)
{
var Baseentity = value as TblBase;
//COID equals other user's ID
if ((Baseentity.COID != 0) && (Baseentity.COID != null) && (Baseentity.COID != MainWindow.LocalUser.ID))
{
var user = DESDatabase.GetUser(Baseentity.COID.Value);
return "Checked out by " + user;
}
else if (Baseentity.COID == MainWindow.LocalUser.ID)
return "You have this node checked out.";
else
return "error";
}
return "error";
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
public class CheckoutToolTipVis : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is TblBase)
{
var Baseentity = value as TblBase;
//COID equals other user's ID
if ((Baseentity.COID != 0) && (Baseentity.COID != null))
{
return true;
}
else
return false;
}
return true;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
И событие, изменившее мою собственность, здесь вызывается:
private Nullable<int> _coid;
public Nullable<int> COID
{
get
{
NotifyPropertyChanged();
return _coid;
}
set
{
_coid = value;
NotifyPropertyChanged();
}
}
События измененного свойства работают для привязок в виде дерева, которые не используют конвертеры, поэтому я не уверен, что мне не хватает.