что не так с моей привязкой данных? - PullRequest
3 голосов
/ 13 марта 2012

Я скопировал код из пустого проекта панорамы и внес некоторые изменения, но где-то что-то не так.

У меня настроен текстовый блок:

<TextBlock Grid.Column="0" Grid.Row="0" Text="{Binding ElementName=CurrentPlaceNow, Path=Temperature}" />

Моя модель выглядит так:

public class CurrentPlaceNowModel : INotifyPropertyChanged
{
    #region PropertyChanged()
    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (null != handler)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    #endregion

    private string _temperature;
    public string Temperature
    {
        get
        {
            return _temperature;
        }
        set
        {
            if (value != _temperature)
            {
                _temperature = value;
                NotifyPropertyChanged("Temperature");
            }
        }
    }
}

И определено определено в MainViewModel():

public CurrentPlaceNowModel CurrentPlaceNow = new CurrentPlaceNowModel();

Наконец, я добавил модификатор для нажатия кнопки:

App.ViewModel.CurrentPlaceNow.Temperature = "foo";

Теперь, почему в текстовом поле ничего не отображается?

Ответы [ 2 ]

4 голосов
/ 13 марта 2012

Ваш Binding должен перемещаться по ViewModel. Привязка к ElementName пытается просмотреть другой объект в дереве визуалов.

Измените привязку к этому:

<TextBlock 
    Grid.Column="0" 
    Grid.Row="0" 
    Text="{Binding CurrentPlaceNow.Temperature}" />

Убедитесь, что свойство вашего ViewModel правильно отформатировано:

private CurrentPlaceNowModel _CurrentPlaceNow = new CurrentPlaceNowModel();
public CurrentPlaceNowModel CurrentPlaceNow
{
   get { return _CurrentPlaceNow; }
   set
   {
       _CurrentPlaceNow = value;
       NotifyPropertyChanged("CurrentPlaceNow");
   }
}

Пока DataContext вашего View является вашей MainViewModel, вы в порядке.

0 голосов
/ 13 марта 2012

Вы неправильно используете ElementName. ElementName - это когда вы хотите привязать другой элемент управления XAML, а не (просмотреть) модель.

Чтобы связать с моделью, задайте для экземпляра этой модели свойство DataContext и привяжите только путь.

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