WPF TextBox привязка к нескольким источникам - PullRequest
1 голос
/ 15 декабря 2010

Относительно новичок в WPF, так что потерпите меня, если я упускаю что-то очевидное.Я работаю над созданием текстового поля «Сводка» в нижней части окна, которое описывает состояние приложения.Код свойства, с которым я хочу связать, выглядит примерно так:

public String WindowDescription
{
   get { return (radioButton.IsChecked == true ? "A " : "B ") + NameTextBox.Text 
+ " " + (cbRoute.SelectedItem != null? comboBox.SelectedItem.ToString() : ""); }
}

И я привязал его к элементу управления следующим образом:

<TextBox IsEnabled="False" Text="{Binding Path=WindowDescription}"/>

Привязка не 'сейчас все работает - у каждого элемента управления, на который есть ссылка в WindowDescription, есть какое-то значение по умолчанию, но даже эти значения не заполняют TextBox.Как я уже сказал, я новичок в WPF, поэтому не стесняйтесь указывать на что-то, чего не хватает в моем примере, каким бы очевидным это ни казалось.Спасибо.

Ответы [ 3 ]

1 голос
/ 15 декабря 2010

Пара вещей.Во-первых, убедитесь, что для вашего DataContext задан экземпляр класса, который содержит свойство WindowDescription.

Обычно это устанавливается в коде для страницы.Это также может быть установлено в XAML, но я не усложню свой ответ.

Во-вторых, привязка данных не видит автоматически изменения значения свойства.Система уведомлений должна быть настроена в классе со свойством WindowDescription.

Google "INotifyPropertyChanged" с Bing и посмотрите.

В противном случае, посмотрите это видео!

http://channel9.msdn.com/blogs/mtaulty/silverlight-databinding-ui-to-net-classes

Люк

0 голосов
/ 15 декабря 2010

Полагаю, Дженс прав, вы установили модель? т.е.

this.DataContext = model;

Где вы моделируете что-нибудь, в нашем случае, где я работаю, мы используем ViewModel и шаблон MVVM. Вы можете рассмотреть что-то вроде Prism и Unity в долгосрочной перспективе, но если вы просто поместите весь свой код в файл .cs для страницы XAML, вот пример.

    namespace DataContextTest

{

открытый частичный класс MainWindow: Window { public MainWindow () { this.DataContext = this; MyString = "Привет ..."; InitializeComponent (); }

public string MyString { get; set; }

} }

Затем в XAML привяжите к MyString, как вы это делали в другом посте, и это должно сработать, конечно же, снова - на этом этапе уведомление об изменении отсутствует. Я могу опубликовать пример этого, если вы хотите, но я думаю, что вы можете Google и увидеть много много простых примеров.

Надеюсь, это было полезно.

0 голосов
/ 15 декабря 2010

Если бы мне пришлось угадывать, я бы предположил, что вы не установили DataContext вашего TextBox (либо напрямую, либо предоставив его для своих родителей где-то).

Путь привязки относительноэлементы DataContext, а DataContext по умолчанию равен нулю (и не сам элемент или содержащее его окно).

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