从DataTemplate样式到ViewModel属性的WPF绑定
我正在尝试将所有TextBlock项目的前景色绑定到ViewModel属性。TextBlock元素位于DataTemplate下定义的网格下。整个代码是在UserControl下定义的 我正在尝试使用RelativeSource绑定来查找UserControl的DataContext并获得所需的属性 XAML: 上面的绑定不起作用。如果我将值绑定更改为硬编码值,例如红色,则这些文本块上的前景色显示正确 如何使绑定与此设置一起工作?Analysis 这似乎是根本原因——绑定到字符串类型的实例,而不是笔刷类型的实例 一些可能的解决方案: 将MapViewModel类的TextColor属性的类型从字符串类型更改为SolidColorBrush类型,并相应地更新MapViewModel类的实现。 创建IValueConverter接口的自定义实现,该接口将字符串作为输入并输出SolidColorBrush类型的实例。从DataTemplate样式到ViewModel属性的WPF绑定,wpf,xaml,mvvm,binding,datatemplate,Wpf,Xaml,Mvvm,Binding,Datatemplate,我正在尝试将所有TextBlock项目的前景色绑定到ViewModel属性。TextBlock元素位于DataTemplate下定义的网格下。整个代码是在UserControl下定义的 我正在尝试使用RelativeSource绑定来查找UserControl的DataContext并获得所需的属性 XAML: 上面的绑定不起作用。如果我将值绑定更改为硬编码值,例如红色,则这些文本块上的前景色显示正确 如何使绑定与此设置一起工作?Analysis 这似乎是根本原因——绑定到字符串类型的实例,而不
您使用的是什么版本的.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>
无论您做什么,只要不在viewmodel中创建画笔或任何其他UI资源,就违反了MVVM。粘贴忘记实现INPC接口的代码时是否删除了它:MapViewModel:INotifyPropertyChanged。如果这只是简化,那么您确定MapViewModel是UserControl的DataContext吗?如果在TextColor属性的get中放置断点,是否调用它?观察输出窗口Ctrl+Alt+O中与数据绑定相关的任何错误消息。按照dkozl的建议检查DataContext的分配。当做
public class MapViewModel
{
public virtual string TextColor
{
get { return _textColor; }
set
{
_textColor = value;
this.RaisePropertyChanged("TextColor");
}
}
private string _textColor = "Black";
}
<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>