Я пытаюсь выяснить правильный способ привязки ViewModel к ContentControl (я просмотрел всю сеть, но не могу найти пример, который я могу получить, чтобы работать правильно).MVVM Basic ContentControl Binding
My Model:
public class Model
{
private string _Variable = "TEST";
public string Variable
{
get { return _Variable; }
set { _Variable = value; }
}
}
Мои ViewModel
public class ViewModel :ViewModelBase
{
private Model _Model = new Model();
public string Variable
{
get { return _Model.Variable; }
set
{
if (_Model.Variable != value)
{
_Model.Variable = value;
RaisePropertyChanged("Variable");
}
}
}
My View/Window
<Window.DataContext>
<local:ViewModel />
</Window.DataContext>
<Window.Resources>
<DataTemplate DataType="{x:Type System:String}">
<TextBox/>
</DataTemplate>
</Window.Resources>
<StackPanel>
<ContentControl Content="{Binding Path=Variable}" />
</StackPanel>
Таким образом, в сущности, у меня есть (или, по крайней мере, я считаю, у меня есть) набор содержимое ContentControl для свойства ViewModel «Variable», это строка типа, поэтому необходимо использовать только DataTemplate и отображается текстовое поле.
И это происходит ... Отображается текстовое поле! Однако текстовое поле пуст, и любые внесенные изменения не влияют на переменную.
Это означает, что я сделал ошибку в Batabinding, но я не понимаю, где. У меня такое чувство, что только потому, что мой DataTemplate отображает текстовое поле, ничто на самом деле не привязывает к нему строку, но это бит, который я потерял.
Спасибо за любую помощь/совет.
Я был отвлечен прошлой ночью и неправильно понял ваш вопрос. Прошу прощения за то, что потратил ваше время. Я удалил свой ответ. Для этого случая вам вообще не нужен или нужен DataTemplate. Ответ Алока правильный, если ваше намерение не является чем-то относительно необычным. Если вы хотите отобразить строку, вы поместите ее в TextBlock или Label, но вы все равно не будете определять DataTemplate, который применяется к любой String в этом файле XAML - строки находятся повсюду в пользовательском интерфейсе! –