我正在學習爲WP7(芒果)創建一個應用程序,並以某種方式出現此問題。 這不是我的應用程序的實際代碼,而是相同問題的簡化版本。我認爲主要是因爲缺乏對綁定工作原理的深入理解。INotifyPropertyChanged實現,綁定不起作用
XAML。
<TextBlock x:Name="PageTitle" Text="{Binding Title}" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
背後的代碼。
private MainPageViewModel viewModel;
// Constructor
public MainPage()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
}
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
viewModel = new MainPageViewModel();
this.DataContext = viewModel;
}
private void ApplicationBarIconButton_Click(object sender, EventArgs e)
{
viewModel.GenerateTitle();
}
我的視圖模型。
private static int counter = 0;
private string title;
public string Title
{
get { return title; }
set
{
if (title != value)
{
title = value;
OnPropertyChanged("Title");
}
}
}
public MainPageViewModel()
{
title = "Init";
}
public void GenerateTitle()
{
if (counter == 0)
title = "0"; // Title = "0" will work fine.
if (counter == 1)
title = "1";
counter++;
}
問題是,它只在我的ViewModel構造函數中更新一次綁定,所以標題是「Init」。
任何對GenerateTitle的調用都不會更新該屬性。如果我使用'Title'而不是'title'來調用setter,它會起作用。
或者我真的應該使用'標題'?我沒有做太多的C#,所以我對OOP的理解還不是很好。
在此先感謝。
謝謝。但爲了理解這個問題,除了備份「Title」屬性外,私有字段「title」的用法是什麼?根據一般經驗法則,你會使用類中定義它的任何屬性嗎?我認爲公共財產應該只是用來在課堂以外進行訪問,並且在內部使用領域。再次感謝。 –
標題字段爲該屬性提供後備存儲。在.NET中,屬性是形式化的一對方法,它在語法上看起來像訪問公共字段,但在封面下執行方法。方法操作的狀態必須存儲在某個地方 - 這就是標題。標題是方法的定義。在課堂內部,您可以使用能夠提供所需效果的構造。如果您想在不發出通知的情況下進行更改,請更改該字段。如果您想進行更改以引發通知,請使用該媒體資源 –