我从空白全景项目中复制了代码并做了一些调整,但某些地方有些不对。
我已经设置了文本块:
<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";
现在,为什么文本框中没有显示任何内容?
答案 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。