C#WPF切换资源以编程方式

时间:2010-09-03 10:34:16

标签: c# wpf resources binding

我试图设计一个对话窗口,根据具体情况显示不同的消息。

所以例如我有一个

<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加载

是可能的,还是有更好的方式来做这样的事情?

2 个答案:

答案 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