我基本上是在问与这个人相同的问题,但是在新的x:Bind
的上下文中。
ViewModels的DataContext定义如下:
<Page.DataContext>
<vm:ChapterPageViewModel x:Name="ViewModel" />
</Page.DataContext>
所以每当我需要绑定某个东西时,就会像这样明确地将其绑定到ViewModel上。
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
的错误,这意味着它没有找到该方法(而是一个null)。
图片类:
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
}
SizeChanged="{x:Bind ViewModel.PageResized}"
这一行,代码就能正常工作。但我需要能够调整图像的大小以适应 ScrollView 的大小,这需要我从模板中访问 ViewModel 属性。 - rancor1223x:Type
,在这种情况下,我认为Binding
会需要它。 - rancor1223