コードビハインドで「正しい」アプローチを使用しているのかどうかわかりませんが、MVVMは役に立たないようです。これはCRUDアプリケーションではありません( MVVMは、MVVMデザインパターンでは、開発者がアプリケーションロジックをコーディングでき、設計者がUIを作成できるので便利です。 CRUDアプリケーションを開発していなくても、MVVMパターンを引き続き使用できます。
UWPアプリでは、Data Bindingは非常に強力です。この場合、データバインディングをConverterと一緒に使用して問題を解決することができます。
私はイベントのためにデータバインディングを使用し、Button
とAppBarButton
秒の可視性を判断するためにConverter
を使用するためにここにサンプルを書いた:ここ
public class VisiableOrNot : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
Uri uri = new Uri(value.ToString());
if (uri != null)
{
if (uri.Equals("ms-appx:///View/Page3.xaml"))
{
return Visibility.Visible;
}
}
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
です:VisiableOrNot
コンバータの
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.Resources>
<Converter:VisiableOrNot x:Key="cvt" />
<Converter:NaviButtonShowOrNot x:Key="btncvt" />
</Grid.Resources>
<CommandBar>
<CommandBar.Content>
<Grid>
<TextBlock Text="Master-Frame" FontSize="20" Margin="20,10" />
</Grid>
</CommandBar.Content>
<AppBarButton Icon="Accept" Label="appbarbutton" Visibility="{Binding ElementName=mainPageframe, Path=Content.BaseUri.AbsoluteUri, Converter={StaticResource cvt}}" />
<AppBarButton Icon="Cancel" Label="appbarbutton" Visibility="{Binding ElementName=mainPageframe, Path=Content.BaseUri.AbsoluteUri, Converter={StaticResource cvt}}" />
</CommandBar>
<Frame x:Name="mainPageframe" Margin="0,55">
<Hub x:Name="hub" SectionHeaderClick="{x:Bind MainPageViewModel.hub_SectionHeaderClick}">
<HubSection x:Name="image1" Header="Image1" Width="200" IsHeaderInteractive="True">
<DataTemplate>
<Grid>
<Image Source="Assets/111.png" Stretch="None" />
</Grid>
</DataTemplate>
</HubSection>
<HubSection x:Name="image2" Header="Image2" Width="200" IsHeaderInteractive="True">
<DataTemplate>
<Grid>
<Image Grid.Row="0" Source="Assets/222.png" Stretch="None" />
</Grid>
</DataTemplate>
</HubSection>
<HubSection x:Name="image3" Header="Image3" Width="200" IsHeaderInteractive="True">
<DataTemplate>
<Grid>
<Image Source="Assets/333.png" Stretch="None" />
</Grid>
</DataTemplate>
</HubSection>
</Hub>
</Frame>
<Button Content="Go Back" Click="{x:Bind MainPageViewModel.Button_Click}" Background="PaleGreen" VerticalAlignment="Bottom" Margin="50,20" Visibility="{Binding ElementName=mainPageframe, Path=Content.BaseUri.AbsoluteUri, Converter={StaticResource btncvt}}" />
</Grid>
コードを私のデモのレンダリング画像であるAppBarButton
は、子フレームのコンテンツがPage3である場合にのみ表示されます。メインページ上にあるときに戻る戻るボタンは表示されません。 ![enter image description here](https://i.stack.imgur.com/zYAVT.gif)
ここには私のdemoがありますので、ダウンロードして確認できます。
* INOTifyPropertyChanged *を実装し、それらのプロパティにバインドボタンの可視性を実装するいくつかのプロパティを持つクラスを考えることができます。 – Romasz
なぜ、これはCRUDアプリケーションではないので、MVVMは役に立たないと思いますか?両者はお互いに関係がありません。 – CodingGorilla
@ CodeGorilla:これはUWPとMVVMに関する私が見つけた唯一のチュートリアルです:https://blogs.msdn.microsoft.com/johnshews_blog/2015/09/09/a-minimal-mvvm-uwp-app/ – inix42