2011-12-15 36 views
0

本文旨在提供所有可能的解決方案,以解決綁定不起作用的Silverlight中一個非常常見和耗時的問題。疑難解答Silverlight數據綁定

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

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

假設屬性或文本框不能正常刷新。

+0

其實不是一個答案,而是一個提示。解決綁定問題時,關聯模擬轉換器可能有助於確定問題。在Convert和ConvertBack方法中設置一個斷點,可以讓我們看到目標屬性是否被成功調用。如果斷點未命中,則意味着目標屬性或路徑存在問題。 – alf

回答

0

該綁定具有不同的數據上下文。

本例不工作,因爲項目模板都有不同的datacontext:

<ListBox> 
    <ListBox.ItemTemplate> 
     <TextBox Text="{Binding TextValue}"/> 
    </ListBox.ItemTemplate> 
</ListBox> 
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")); 
      } 
     } 
    } 
    //... 
} 
0

datacontext爲空。

上面的例子,如果在DataContext沒有關聯行不通:

public MainPage() 
{ 
    this.DataContext = new ViewModel(); 
} 
0

的結合模式沒有很好地指定。

上面的例子需要在雙向模式,如果我們希望TextValue屬性更新:

<TextBox Text="{Binding TextValue, Mode=TwoWay}"/> 

默認情況下,該模式是單向的,這意味着控制內容將被更新時,財產變化。

0

該轉換器不是很好有關。

關聯轉換器的最常見方法是通過靜態資源。確保密鑰名稱寫得很好。

<Page.Resources> 
    <converters:AValueConverter x:Key="AValueConverter"/> 
</Page.Resources> 

<TextBox Text="{Binding TextValue, Converter={StaticResource AValueConverter}}"/> 
0

目標屬性寫得不好或不存在。

在這種情況下,轉換器將不會被調用。

0

目標屬性或包含類的路徑上的某些屬性爲空或不可見。

包含頁面或用戶控件應該有權訪問目標屬性。此外,如果路徑上的某些屬性爲空,則它將以靜默方式失敗。

如果目標屬性爲空,則TargetNullValue可能會有所幫助。