我的数据绑定有什么问题?

时间:2012-03-13 19:16:55

标签: c# windows-phone-7 xaml data-binding

我从空白全景项目中复制了代码并做了一些调整,但某些地方有些不对。

我已经设置了文本块:

<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 个答案:

答案 0 :(得分:4)

您的Binding应该浏览ViewModel。绑定到ElementName会尝试查看Visual Tree中的另一个对象。

将您的绑定更改为:

<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");
   }
}

只要你的View的DataContext是你的MainViewModel,你就可以了。

答案 1 :(得分:0)

您使用的是ElementName错误。 ElementName是您想要绑定到另一个XAML控件而不是(视图)模型。

要绑定到model,请将该模型的实例设置为DataContext属性,并仅绑定Path。