Silverlight数据绑定疑难解答

时间:2011-12-15 02:48:37

标签: silverlight xaml data-binding

这篇文章旨在为Silverlight中一个非常常见且耗时的问题提供所有可能的解决方案,其中绑定不起作用。

<TextBox Text="{Binding TextValue}"/>

public class ViewModel
{
    // ...
    public string TextValue { get; set; }
    // ...
}

假设属性或TextBox无法正确刷新。

7 个答案:

答案 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可能会有所帮助。