本文旨在提供所有可能的解決方案,以解決綁定不起作用的Silverlight中一個非常常見和耗時的問題。疑難解答Silverlight數據綁定
<TextBox Text="{Binding TextValue}"/>
public class ViewModel
{
// ...
public string TextValue { get; set; }
// ...
}
假設屬性或文本框不能正常刷新。
本文旨在提供所有可能的解決方案,以解決綁定不起作用的Silverlight中一個非常常見和耗時的問題。疑難解答Silverlight數據綁定
<TextBox Text="{Binding TextValue}"/>
public class ViewModel
{
// ...
public string TextValue { get; set; }
// ...
}
假設屬性或文本框不能正常刷新。
該綁定具有不同的數據上下文。
本例不工作,因爲項目模板都有不同的datacontext:
<ListBox>
<ListBox.ItemTemplate>
<TextBox Text="{Binding TextValue}"/>
</ListBox.ItemTemplate>
</ListBox>
目標類沒有實現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"));
}
}
}
//...
}
datacontext爲空。
上面的例子,如果在DataContext沒有關聯行不通:
public MainPage()
{
this.DataContext = new ViewModel();
}
的結合模式沒有很好地指定。
上面的例子需要在雙向模式,如果我們希望TextValue屬性更新:
<TextBox Text="{Binding TextValue, Mode=TwoWay}"/>
默認情況下,該模式是單向的,這意味着控制內容將被更新時,財產變化。
該轉換器不是很好有關。
關聯轉換器的最常見方法是通過靜態資源。確保密鑰名稱寫得很好。
<Page.Resources>
<converters:AValueConverter x:Key="AValueConverter"/>
</Page.Resources>
<TextBox Text="{Binding TextValue, Converter={StaticResource AValueConverter}}"/>
目標屬性寫得不好或不存在。
在這種情況下,轉換器將不會被調用。
目標屬性或包含類的路徑上的某些屬性爲空或不可見。
包含頁面或用戶控件應該有權訪問目標屬性。此外,如果路徑上的某些屬性爲空,則它將以靜默方式失敗。
如果目標屬性爲空,則TargetNullValue可能會有所幫助。
其實不是一個答案,而是一個提示。解決綁定問題時,關聯模擬轉換器可能有助於確定問題。在Convert和ConvertBack方法中設置一個斷點,可以讓我們看到目標屬性是否被成功調用。如果斷點未命中,則意味着目標屬性或路徑存在問題。 – alf