我基本上提出了與this person相同的問題,但在更新的x:Bind
的上下文中。x:將ViewModel方法綁定到DataTemplate中的事件
的ViewModels' DataContext的定義,像這樣
<Page.DataContext>
<vm:ChapterPageViewModel x:Name="ViewModel" />
</Page.DataContext>
所以每當我需要綁定的東西我做明確地向視圖模型,像這樣
ItemsSource="{x:Bind ViewModel.pageList, Mode=OneWay}"
但是這並不模板內
工作<FlipView ItemsSource="{x:Bind ViewModel.pageList, Mode=OneWay}">
<FlipView.ItemTemplate>
<DataTemplate x:DataType="models:Image">
<ScrollViewer SizeChanged="{x:Bind ViewModel.PageResized}"> <-- this here is the culprit
<Image Source="{x:Bind url}"/>
</ScrollViewer>
</DataTemplate>
</FlipView.ItemTemplate>
</FlipView>
閱讀文檔,我發現使用Path
應該基本上重置上下文到頁面,但是這個(x:Bind Path=ViewModel.PageResizeEvent
也沒有工作。我仍然得到Object reference not set to an instance of an object
,這應該表示它看不到該方法(但爲空)。
圖片類:
public class Image {
public int page { get; set; }
public string url { get; set; }
public int width { get; set; }
public int heigth { get; set; }
}
而在ChapterPageViewModel
private List<Image> _pageList;
public List<Image> pageList {
get { return _pageList; }
set { Set(ref _pageList, value); }
}
public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode,
IDictionary<string, object> suspensionState)
{
Initialize();
await Task.CompletedTask;
}
private async void Initialize()
{
pageList = await ComicChapterGet.GetAsync(_chapterId);
}
public void PageResized(object sender, SizeChangedEventArgs e)
{
//resizing logic happens here
}
那個模型:Image類有一個ViewModel屬性嗎?如果不是,並且您試圖引用與「FlipView.ItemsSource」綁定的相同ViewModel,那麼您將無法以這種方式訪問它,因爲DataTemplate的DataContext現在是模型:Image目的。 –
它的確如此。如果我取出SizeChanged =「{x:Bind ViewModel.PageResized}」,代碼將起作用。但我需要能夠調整ScrollView大小的圖像大小,這需要我從模板中訪問ViewModel屬性。 – rancor1223
你介意添加該Image類的代碼嗎? –