【发布时间】:2016-01-11 15:35:55
【问题描述】:
我正在尝试将所有TextBlock 项目的ForeGround 颜色绑定到ViewModel 属性。 TextBlock 元素位于 Grid 下,而 Grid 本身在 DataTemplate 下定义。整个代码在UserControl 下定义。
我正在尝试使用RelativeSource 绑定来查找UserControl 的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 绑定更改为硬编码值,例如“红色”,那么 TextBlocks 上的 Foreground 颜色将正确显示。
如何让绑定与此设置一起使用?
【问题讨论】:
-
你在粘贴忘记实现INPC接口的代码时删除了它:
MapViewModel: INotifyPropertyChanged。如果这只是简化,那么您确定MapViewModel是您的UserControl的DataContext吗? -
如果在TextColor属性的get中放了一个断点,是否调用?观察输出窗口 (Ctrl+Alt+O) 中与 DataBinding 相关的任何错误消息。按照 dkozl 的建议检查 DataContext 的分配。问候
标签: wpf xaml mvvm binding datatemplate