这似乎是一个棘手的问题。 您有一个绑定到许多用户控件的数据对象。 简化为:
public class Shift : INotifyPropertyChanged
{
private int _baseColor;
public int BaseColor
{
get { return _baseColor; }
set
{
_baseColor = value;
OnPropertyChanged("BaseColor");
}
}
private Employees_E _employee;
public Employees_E Employee
{
get
{
return _employee;
}
set
{
_employee = value;
OnPropertyChanged("Employee");
}
}
这是交易: 根据Employee,用户控件将更改其背景。解决这个问题的一种方法(工作正常)当然是使用转换器,比如......
Background="{Binding Employee, ElementName=uc, Converter={StaticResource EmployeeValueConverter}
但是当所有这些都是动态的时候,它会让事情变得复杂。我事先并不知道员工的人数,姓名或员工的相关颜色。
我想要的是我的用户控件绑定到Dictionary,以便Shift.BaseColor绑定到键为Employee的值。类似的东西:
Background="{Binding BaseColor, ElementName=anynamespace, Converter={StaticResource AnotherConverter}
或者更喜欢:
Background="{Binding MyDictionary[Employee].Value... with a converter...
用户将能够在不更改数据对象的情况下更改关联的颜色,因此在颜色更改时我需要另一种方法来更新我的用户控件。 该值将是一个整数,并且在转换器中我返回一个LinearGradientBrush形式的列表,因此整数将是该列表中的索引。
更新1
我将改变的背景是边框背景,其中Multibinding是不可能的?我发现另一个线程显示如何使用多重绑定但在这种情况下不起作用......?
更新2
问题不在于如何访问值或转换器。问题是当用户更改字典中的值以及如何正确绑定它以使用户控件更新它的背景时。我们假设我们有一个键= MARIA,值为21,这是我列表的索引。然后用户控件具有某种颜色。但是用户可能希望将另一种颜色与该键相关联,但在那里我无法弄清楚如何绑定它。
<UserControl x:Class="SPAS.Controls.ShiftControl" ...
<Border BorderThickness="1" x:Name="myBorder" Background="{Binding BaseColor, ElementName=uc, Converter={StaticResource BaseColorLinear}, Mode=TwoWay}" >
...
</Border>
</UserControl>
public partial class ShiftControl : UserControl
{
public static DependencyProperty BaseColorProperty = DependencyProperty.Register("BaseColor", typeof(int), typeof(ShiftControl), new UIPropertyMetadata(0));
public int BaseColor
{
get { return (int)GetValue(BaseColorProperty); }
set { SetValue(BaseColorProperty, value); }
}
public static DependencyProperty EmployeeProperty = DependencyProperty.Register("Employee", typeof(Employees_E), typeof(ShiftControl), new PropertyMetadata(Employees_E.VAKANT));
public Employees_E Employee
{
get { return (Employees_E)GetValue(EmployeeProperty); }
set { SetValue(EmployeeProperty, value); }
}...
我希望BaseColor来自
Dictionary<Employees_E, int>
因此用户可以更改Employee属性或字典中的值。