这篇文章旨在为Silverlight中一个非常常见且耗时的问题提供所有可能的解决方案,其中绑定不起作用。
<TextBox Text="{Binding TextValue}"/>
public class ViewModel
{
// ...
public string TextValue { get; set; }
// ...
}
假设属性或TextBox无法正确刷新。
答案 0 :(得分:0)
目标类未实现INotifyPropertyChanged。
包含绑定属性的类需要实现INotifyPropertyChanged,并在绑定属性的值更改时引发PropertyChanged。
public class ViewModel : INotifyPropertyChanged
{
//...
private string textValue;
public string TextValue
{
get { return textValue; }
set
{
textValue = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("TextValue"));
}
}
}
//...
}
答案 1 :(得分:0)
datacontext为空。
如果datacontext没有关联,上面的示例将永远不会起作用:
public MainPage()
{
this.DataContext = new ViewModel();
}
答案 2 :(得分:0)
未明确指定绑定模式。
如果我们想要更新TextValue属性,上面的示例需要处于TwoWay模式:
<TextBox Text="{Binding TextValue, Mode=TwoWay}"/>
默认情况下,模式为OneWay,这意味着当属性更改时,控件内容将会更新。
答案 3 :(得分:0)
绑定具有不同的datacontext。
此示例无效,因为项模板具有不同的datacontext:
<ListBox>
<ListBox.ItemTemplate>
<TextBox Text="{Binding TextValue}"/>
</ListBox.ItemTemplate>
</ListBox>
答案 4 :(得分:0)
转换器关联不良。
关联转换器的最常用方法是通过静态资源。确保密钥名称写得很好。
<Page.Resources>
<converters:AValueConverter x:Key="AValueConverter"/>
</Page.Resources>
<TextBox Text="{Binding TextValue, Converter={StaticResource AValueConverter}}"/>
答案 5 :(得分:0)
目标属性写得不好或不存在。
在这种情况下,不会调用转换器。
答案 6 :(得分:0)
目标属性或包含类的路径上的某些属性为null或不可见。
包含的页面或用户控件应该可以访问目标属性。此外,如果路径上的某些属性为null,则它将以静默方式失败。
如果target属性为null,TargetNullValue可能会有所帮助。