我正在尝试将所有reservation = Reservation.objects.create(user=forUser, resource=resource, timeFrom=timeFrom, timeTo=timeTo, extendedReservation=extendedReservation.uuid)
项的ForeGround
颜色绑定到TextBlock
属性。 ViewModel
元素位于TextBlock
下,Grid
本身定义在DataTemplate
下。整个代码在UserControl
。
我正在尝试使用RelativeSource
绑定来查找UserControl
' s DataContext
并获取我需要的属性。
XAML:
<my:MapControl>
<my:MapControl.Resources>
<ResourceDictionary>
<DataTemplate x:Key="SomeTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.Style>
<Style TargetType="Grid">
<Setter Property="TextElement.Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=DataContext.TextColor}" />
</Style>
</Grid.Style>
<TextBlock Grid.Column="0" />
<TextBlock Grid.Column="1" />
</Grid>
</DataTemplate>
</ResourceDictionary>
</my:MapControl.Resources>
</my:MapControl>
视图模型:
public class MapViewModel
{
public virtual string TextColor
{
get { return _textColor; }
set
{
_textColor = value;
this.RaisePropertyChanged("TextColor");
}
}
private string _textColor = "Black";
}
上述绑定不起作用。如果我将Value绑定更改为硬编码值,例如&#34; Red&#34;例如,Foreground
上的TextBlocks
颜色正确显示。
如何让绑定与此设置一起使用?
答案 0 :(得分:0)
似乎是根本原因 - 绑定到string
类型的实例而不是Brush
类型的实例。
TextColor
类的MapViewModel
属性类型从string
类型更改为SolidColorBrush
类型,并更新MapViewModel
的实施适当地上课。IValueConverter
接口的自定义实现,该接口以string
作为输入并输出SolidColorBrush
类型的实例。答案 1 :(得分:0)
您使用的是哪个版本的.NET?适用于4.5,但IIRC没有使用早期版本,你必须明确声明solidcolorbrush:
<Style TargetType="Grid">
<Setter Property="TextElement.Foreground">
<Setter.Value>
<SolidColorBrush Color="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=DataContext.TextColor}" />
</Setter.Value>
</Setter>
</Style>
无论你做什么都不在视图模型中创建画笔或任何其他UI资源,它都违反了MVVM。