C # WPF Переключить Ресурс Программно - PullRequest
0 голосов
/ 03 сентября 2010

Я пытаюсь создать диалоговое окно, которое будет отображать различные сообщения в зависимости от того, какой случай будет истинным.

, например, когда у меня есть

<CustomDialog Content="{Binding Path=Name}"/>

, есть ливозможность изменить Binding Path = Name на Path = Что угодно или как вы реализуете что-то подобное?Когда Control должен использовать другие ресурсы во время выполнения.

-------------- edit

Я в порядке, я попытаюсь описать мою проблему лучше;)У меня есть 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 Doing it customdialog.visibility = true;например,

<CustomDialog Text=”” />

Я хочу определить, какой ключ из ресурса будет взят, когда откроется диалоговое окно.

что-то вроде customdialog.text = Message1;но Loaded from ResourceDictionary

это возможно или есть лучший способ сделать что-то подобное?

Ответы [ 2 ]

2 голосов
/ 03 сентября 2010

Вы можете предоставить другое содержимое тому же свойству 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, которое сообщит представлению, что связанное значение обновилось, и отобразит его в пользовательском интерфейсе.

1 голос
/ 03 сентября 2010

Самым простым способом, который я могу придумать, будет привязка к родительскому элементу, а не к дочернему свойству, а затем использование DataTemplateSelector для выбора другого шаблона во время выполнения, в зависимости от некоторых условий, связанных со связанным объектом или его свойства.

В качестве альтернативы, если у контента есть четко определенные типы, вам нужно только определить шаблоны данных с конкретными типами данных, и они будут автоматически использоваться для отображения объектов этих типов.

Не зная больше о контексте, я не могу быть более конкретным, но если вы ищете дополнительную информацию о DataTemplates и DataTemplateSelectors, у вас все будет хорошо - вы можете найти много полезной информации здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...