2010-12-15 5 views
1

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

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

+0

Посмотрите на вывод Debug приложения yor. Существуют ли обязательные ошибки? – Jens 2010-12-15 15:05:47

ответ

1

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

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

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

Google «INotifyPropertyChanged» с Bing и посмотреть.

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

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

Люк

+0

Это было ключом к выяснению решения. Я завершил создание частного класса, который привязал свойство к каждому элементу управления, и в настройке каждого из этих свойств он установил «this.Summary = getSummary()», который сгенерировал строку, а затем поместил ее в это. setter создал NotifyPropertyChangedEvent, тем самым обновляя текстовое поле каждый раз, когда был изменен элемент управления. Благодаря! – 2010-12-21 13:26:16

0

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

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

0

Я предполагаю, Jens является правильным, вы установите модель? т.е.

this.DataContext = model; 

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

namespace DataContextTest 

{

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

public string MyString { get; set; } 

} }

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

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

Смежные вопросы