在我的视图模型中,我已经将DisplayAttributes添加到我的属性中,并且现在希望将我的TextBox控件的ToolTip属性绑定到DisplayAttribute的Description属性。
我找到了处理描述读取的this SO question,但是不知道如何使用计算出的描述填充ToolTip。
发布于 2011-04-20 12:25:57
由于WPF不支持此属性,因此您将在view-model中输入属性,view-model将查找它们,因此这似乎是一种间接的方法。它们可以是任何内部格式。
在任何情况下,这里都是您所说的问题的演示。我们向文本框绑定到的类添加一个Descriptions属性。该属性是将属性名称映射到描述(即属性)的字典。在视图模型的静态构造函数中,我们查找所有属性并填充字典。
包含两个文本框的小型XAML文件:
<Grid >
<StackPanel>
<TextBox Text="{Binding FirstName}" ToolTip="{Binding Descriptions[FirstName]}"/>
<TextBox Text="{Binding LastName}" ToolTip="{Binding Descriptions[LastName]}"/>
</StackPanel>
</Grid>代码隐藏:
DataContext = new DisplayViewModel();和一个具有两个属性的基本视图模型:
public class DisplayViewModel
{
private static Dictionary<string, string> descriptions;
static DisplayViewModel()
{
descriptions = new Dictionary<string,string>();
foreach (var propertyName in PropertyNames)
{
var property = typeof(DisplayViewModel).GetProperty(propertyName);
var displayAttributes = property.GetCustomAttributes(typeof(DisplayAttribute), true);
var displayAttribute = displayAttributes.First() as DisplayAttribute;
var description = displayAttribute.Name;
descriptions.Add(propertyName, description);
}
}
public DisplayViewModel()
{
FirstName = "Bill";
LastName = "Smith";
}
public static IEnumerable<string> PropertyNames { get { return new[] { "FirstName", "LastName" }; } }
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Display(Name = "Last Name")]
public string LastName { get; set; }
public IDictionary<string, string> Descriptions { get { return descriptions; } }
}https://stackoverflow.com/questions/5724965
复制相似问题