該項目:一個帶有「貼子」信息的小公告板。 VB.Net,VS2013,Windows 8.1桌面。棱鏡/ MVVM。Prism Windows 8.1 NotifyProperyChanged不會觸發?
問題:NotifyPropertyChanged事件在屬性更改時似乎根本不會觸發。信息不會顯示在布告欄上。
問題:這是爲什麼?或者:下面的代碼有什麼問題?
代碼:
首先,我們必須審視。它的定義,像這樣:
<prism:VisualStateAwarePage
x:Name="pageRoot"
x:Class="MemoBoard.Views.BoardPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:prism="using:Microsoft.Practices.Prism.StoreApps"
prism:ViewModelLocator.AutoWireViewModel="True"
mc:Ignorable="d">
此外,使用「報事貼」模板出現的音符,定義爲:與該的ItemsSource和性能
<prism:VisualStateAwarePage.Resources>
<DataTemplate x:Name="PostIt">
<Grid Width="250" Height="250" >
<TextBlock
FontFamily="Buxton Sketch"
Text="{Binding Text}"
FontSize="20"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Margin="20,40,50,0"
TextWrapping="WrapWholeWords">
</TextBlock>
</Grid>
</DataTemplate>
</prism:VisualStateAwarePage.Resources>
最後的GridView中模板:
<GridView x:Name="grdMessages"
ItemsSource="{Binding Messages}"
ItemTemplate="{StaticResource PostIt}"/>
到目前爲止在視圖中呈現的XAML。代碼隱藏只不過是一個簡單的構造函數初始化,它看起來像:
Namespace Views
Public NotInheritable Class BoardPage
Inherits VisualStateAwarePage
Public Sub New()
InitializeComponent()
End Sub
End Class
End Namespace
這都是非常簡單的,幸運的是,使用Prism庫來獲得更豐富的功能。下一部分是ViewModel,並且Viewmodel也很簡單。 它看起來像:
Namespace ViewModels
Public Class BoardPageViewModel
Inherits ViewModel
Private _MessageRepository As IMessageRepository
Private Property _Messages As ObservableCollection(Of Message)
Public Property Messages As ObservableCollection(Of Message)
Get
Return _Messages
End Get
Set(value As ObservableCollection(Of Message))
SetProperty(_Messages, value)
End Set
End Property
Public Overrides Async Sub OnNavigatedTo(navigationParameter As Object, navigationMode As NavigationMode, viewModelState As Dictionary(Of String, Object))
MyBase.OnNavigatedTo(navigationParameter, navigationMode, viewModelState)
_MessageRepository = New MessageRepository
Messages = Await _MessageRepository.GetMessagesAsync()
End Sub
End Class
End Namespace
的消息通過的WebAPI是存儲庫的一部分檢索,我敢肯定,這是工作的罰款。項目被正確讀取並傳遞給ViewModel。
當我遍歷代碼時,我看到消息到達和Set,並因此調用SetProperty。
但是消息沒有顯示在視圖上。在我看來,當檢索到消息時,View並未被通知更改。
這種方法有什麼問題?
我注意到這篇文章的一些downvotes。也許這篇文章沒有解決你的問題。但事實確實如此,這對其他人來說肯定是有價值的。如果它不包含解決方案,請繼續尋找其他答案。但是,我猜想沒有理由冷靜下來。你應該減少WRONG的帖子,幫助別人避免犯錯誤。 – 2014-10-12 20:31:48