我试图设计一个对话窗口,根据具体情况显示不同的消息。
所以例如我有一个
<CustomDialog Content="{Binding Path=Name}"/>
是否有可能将绑定路径=名称更改为路径=无论是什么或如何实现类似的东西?当Control应该在运行时使用其他资源时。
--------------修改
我确定我会尝试更好地描述我的问题;) 我有一个带字符串的ResourceDictionary,例如
<System:String x:Key="Message1">Message1</System:String>
<System:String x:Key="Message2">Message2</System:String>
<System:String x:Key="Message3">Message3</System:String>
所以当我现在调用我的UserControl时 这样做customdialog.visibility = true;例如
<CustomDialog Text=”” />
我想定义弹出对话框时从resourcedictionary中获取哪个键。
类似customdialog.text = Message1;但是从ResourceDictionary加载
是可能的,还是有更好的方式来做这样的事情?
答案 0 :(得分:2)
您可以在代码隐藏中在运行时向同一属性Name
提供另一个内容。假设您Initialize
中有Show
(或可能是CustomDialog
)方法,而最后一个方法实现了INotifyPropertyChanged
:
public class CustomDialog : INotifyPropertyChanged
{
//Your implementation of class goes here
public void Initialize(string message)
{
Name = message;
Visibility = Visibility.Visible;
}
public string Name
{
get {return _name;}
set
{
if (_name != value)
{
_name = value;
raiseOnPropertyChanged("Name");
}
}
}
//Your implementation of class goes here
}
在Initialize方法中,将会更新Name
属性,并显示您的控件。当设置Name
属性必须引发PropertyChanged
事件时,该事件将告知演示文稿绑定值已更新并在UI中反映它。
答案 1 :(得分:1)
我能想到的最简单的方法是绑定到父项而不是子属性,然后使用DataTemplateSelector在运行时选择不同的模板,具体取决于涉及绑定对象的某些条件或其属性。
或者,如果内容具有明确定义的类型,则只需要使用特定数据类型定义DataTemplates,它们将自动用于显示这些类型的对象。
我不太了解上下文我不能更具体,但如果你搜索有关DataTemplates和DataTemplateSelectors的更多信息你应该没问题 - 你可以找到很多有用的信息here。