私は基本的にthis personと同じ質問をしますが、新しいx:Bind
のコンテキストで質問しています。私は、テンプレート内で動作しないことがとてもx:DataTemplate内のイベントにViewModelメソッドをバインドします
ItemsSource="{x:Bind ViewModel.pageList, Mode=OneWay}"
ようのViewModelに私は明示的にそれを行うに何かをバインドする必要があるとき
のviewmodels' DataContextのは、だから、そう
<Page.DataContext>
<vm:ChapterPageViewModel x:Name="ViewModel" />
</Page.DataContext>
のように定義されて
<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
を取得していますが、それはメソッド(しかしヌル)が表示されないことを意味するはずです。
Imageクラス:
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
}
これらのモデルは:画像クラスはViewModelプロパティを持っていますか?そうでない場合、 'FlipView.ItemsSource'にバインドした同じViewModelを参照しようとしている場合、DataTemplateのDataContextがモデルになっているので、そのようにアクセスすることはできません:Imageオブジェクト。 –
です。私が 'SizeChanged =" {x:Bind ViewModel.PageResized} "を取り除くと、コードが動作します。しかし、ScrollViewのサイズでイメージのサイズを調整できる必要があります。これは、テンプレート内からViewModelプロパティにアクセスする必要があります。 – rancor1223
Imageクラスのコードを追加してもよろしいですか? –