好的,所以我現在一直在研究幾個小時,仍然無法弄清楚爲什麼我的ViewModel中的數據沒有綁定到我的主頁中的XAML。我甚至開始了一個新項目,並以相同的方式實現它,所以我認爲它可能與名稱空間或我不太熟悉的東西有關。將C#類綁定到WP7的XAML
當我的應用程序啓動時,我創建一個App.cs中的全局ViewModel,我用它將數據綁定到我的XAML視圖。
public HomeViewModel ViewModel { get; private set; }
private void Application_Launching(object sender, LaunchingEventArgs e)
{
ViewModel = new HomeViewModel();
(App.Current as App).RootFrame.DataContext = (App.Current as App).ViewModel;
}
然後HomeViewModel看起來是這樣的:
public class HomeViewModel : INotifyPropertyChanged
{
/***View Model***/
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
public HomeViewModel()
{
PropertyChanged = new PropertyChangedEventHandler(delegate { });
}
public Profile CurrentProfile; /*EDIT: Missing {get;set;} Which is necessary for
*any property, including ones below that I
*referenced in the XAML
*/
public string NotificationImage;
public ButtonPanelPath UniversalButtonPath;
public void setProfile(Profile p)
{
CurrentProfile = p;
NotifyPropertyChanged("CurrentProfile");
}
.
.
....rest of access methods and properties
現在,當我的程序運行,我相信,在HomeViewModel中的數據被更新,NotifyPropertyChanged方法被調用每次100%新的領域是「設置」。
而這個類是綁定到RootFrame的嗎?所以我不應該能夠在我的主頁的xaml中訪問這些字段?這是在主電網的堆疊面板的XAML的一部分的例子:
<Border BorderThickness="5" BorderBrush="Aqua" CornerRadius="20">
<StackPanel Name="profileInfo" DataContext="{Binding CurrentProfile}">
<TextBlock Text="{Binding FirstName}" Name="profileName" FontSize="26"
FontWeight="Bold" HorizontalAlignment="Center" />
<StackPanel Orientation="Horizontal">
<StackPanel>
<TextBlock Text="{Binding Level}" Name="userLevel" FontSize="32"
Margin="10,0,0,0"/>
<TextBlock Text="{Binding LevelName}" Name="levelName" FontSize="26"
Margin="10,0,0,0"/>
<TextBlock Text="{Binding PointsNeeded}" Name="pointsBar"
Margin="10,0,0,0"/>
</StackPanel>
<Image x:Name="levelIcon" Source="{Binding PictureUrl}"
Margin="15,0,0,0"/>
</StackPanel>
</StackPanel>
</Border>
所以在這裏等級,LevelName,PointsNeeded和PictureUrl在檔案(或CurrentProfile所有的公共領域是檔案的具體實例我參考了)。我試過配置文件[場],但也沒有工作。如果有人能告訴我我錯過了什麼來完成綁定,那將不勝感激。
順便說命名空間是如下如果這意味着什麼
-MainPage是MyApp.src.pages
-APP是MyApp的
-HomeViewModel是MyApp.src.classes
謝謝提前爲您提供有用的解決方案/意見,如果您需要更多的數據/信息,請提問。
好吧,所以我發現有一個很大的問題,就是當你聲明屬性這樣做的時候:「public Profile CurrentProfile {get; set;}」,而不是如上所述。對於您將在XAML中使用INotifyPropertyChanged引用的所有其他屬性,請執行相同的操作。 – methodMan
很高興您解決了您的問題 - 如果您找出實際造成問題的原因,請發表回覆! –
在那裏,我在代碼部分添加了編輯,這是你的意思嗎? – methodMan