UWP NavigationView navigation via MVVM
I am using as main control in my app NavigationView and have Frame where page is loading.
<NavigationView x:Name="MyNavView" IsBackButtonVisible="Collapsed" SelectionChanged="{x:Bind ViewModel.OnSelectionChanged}" PaneDisplayMode="Top">
<NavigationView.MenuItems>
<NavigationViewItem Icon="Contact" Content="Contact" Tag="MasterDetailPage"/>
<NavigationViewItem Icon="Favorite" Content="Favorites" Tag="FavoritesPage"/>
</NavigationView.MenuItems>
<Frame x:Name="RootFrame"/>
</NavigationView>
There are two events SelectionChanged and ItemInvoked that make available to realise navigation to pages that loading in RootFrame (name of my frame). But I want to use Command to make MVVM. And I have not found Command prop even for NavigationView itself or for NavigationViewItem. After that I have handled SelectionChanged event in ViewModel but at my view it contradicts MVVM.
So,how can I make MVVM using Command? If there is no such opportunity tell how to realise MVVM itself not handling event.
c# mvvm uwp navigation
New contributor
add a comment |
I am using as main control in my app NavigationView and have Frame where page is loading.
<NavigationView x:Name="MyNavView" IsBackButtonVisible="Collapsed" SelectionChanged="{x:Bind ViewModel.OnSelectionChanged}" PaneDisplayMode="Top">
<NavigationView.MenuItems>
<NavigationViewItem Icon="Contact" Content="Contact" Tag="MasterDetailPage"/>
<NavigationViewItem Icon="Favorite" Content="Favorites" Tag="FavoritesPage"/>
</NavigationView.MenuItems>
<Frame x:Name="RootFrame"/>
</NavigationView>
There are two events SelectionChanged and ItemInvoked that make available to realise navigation to pages that loading in RootFrame (name of my frame). But I want to use Command to make MVVM. And I have not found Command prop even for NavigationView itself or for NavigationViewItem. After that I have handled SelectionChanged event in ViewModel but at my view it contradicts MVVM.
So,how can I make MVVM using Command? If there is no such opportunity tell how to realise MVVM itself not handling event.
c# mvvm uwp navigation
New contributor
1
FWIW, it's still MVVM compliant if you handle the selection change event in your view, that simply forwards the appropriate information to a method on your ViewModel. No need to over complicate anything.
– Johnny Westlake
yesterday
You already have your ViewModel referenced in your code-behind in order to use x:Bind, so I can't think of any reason whatsoever why you can't just use the code-behind event handlers. This does not violate MVVM, not even a little. That said, Xaml Behaviors can probably do what you want.
– Sean O'Neil
yesterday
You are wright @SeanO'Neil ,that behavior make able what I am going to do.I made MVVM with Command using EventToCommand from this nuget package.
– Allaev Bekzod
19 hours ago
add a comment |
I am using as main control in my app NavigationView and have Frame where page is loading.
<NavigationView x:Name="MyNavView" IsBackButtonVisible="Collapsed" SelectionChanged="{x:Bind ViewModel.OnSelectionChanged}" PaneDisplayMode="Top">
<NavigationView.MenuItems>
<NavigationViewItem Icon="Contact" Content="Contact" Tag="MasterDetailPage"/>
<NavigationViewItem Icon="Favorite" Content="Favorites" Tag="FavoritesPage"/>
</NavigationView.MenuItems>
<Frame x:Name="RootFrame"/>
</NavigationView>
There are two events SelectionChanged and ItemInvoked that make available to realise navigation to pages that loading in RootFrame (name of my frame). But I want to use Command to make MVVM. And I have not found Command prop even for NavigationView itself or for NavigationViewItem. After that I have handled SelectionChanged event in ViewModel but at my view it contradicts MVVM.
So,how can I make MVVM using Command? If there is no such opportunity tell how to realise MVVM itself not handling event.
c# mvvm uwp navigation
New contributor
I am using as main control in my app NavigationView and have Frame where page is loading.
<NavigationView x:Name="MyNavView" IsBackButtonVisible="Collapsed" SelectionChanged="{x:Bind ViewModel.OnSelectionChanged}" PaneDisplayMode="Top">
<NavigationView.MenuItems>
<NavigationViewItem Icon="Contact" Content="Contact" Tag="MasterDetailPage"/>
<NavigationViewItem Icon="Favorite" Content="Favorites" Tag="FavoritesPage"/>
</NavigationView.MenuItems>
<Frame x:Name="RootFrame"/>
</NavigationView>
There are two events SelectionChanged and ItemInvoked that make available to realise navigation to pages that loading in RootFrame (name of my frame). But I want to use Command to make MVVM. And I have not found Command prop even for NavigationView itself or for NavigationViewItem. After that I have handled SelectionChanged event in ViewModel but at my view it contradicts MVVM.
So,how can I make MVVM using Command? If there is no such opportunity tell how to realise MVVM itself not handling event.
c# mvvm uwp navigation
c# mvvm uwp navigation
New contributor
New contributor
edited yesterday
New contributor
asked yesterday
Allaev Bekzod
62
62
New contributor
New contributor
1
FWIW, it's still MVVM compliant if you handle the selection change event in your view, that simply forwards the appropriate information to a method on your ViewModel. No need to over complicate anything.
– Johnny Westlake
yesterday
You already have your ViewModel referenced in your code-behind in order to use x:Bind, so I can't think of any reason whatsoever why you can't just use the code-behind event handlers. This does not violate MVVM, not even a little. That said, Xaml Behaviors can probably do what you want.
– Sean O'Neil
yesterday
You are wright @SeanO'Neil ,that behavior make able what I am going to do.I made MVVM with Command using EventToCommand from this nuget package.
– Allaev Bekzod
19 hours ago
add a comment |
1
FWIW, it's still MVVM compliant if you handle the selection change event in your view, that simply forwards the appropriate information to a method on your ViewModel. No need to over complicate anything.
– Johnny Westlake
yesterday
You already have your ViewModel referenced in your code-behind in order to use x:Bind, so I can't think of any reason whatsoever why you can't just use the code-behind event handlers. This does not violate MVVM, not even a little. That said, Xaml Behaviors can probably do what you want.
– Sean O'Neil
yesterday
You are wright @SeanO'Neil ,that behavior make able what I am going to do.I made MVVM with Command using EventToCommand from this nuget package.
– Allaev Bekzod
19 hours ago
1
1
FWIW, it's still MVVM compliant if you handle the selection change event in your view, that simply forwards the appropriate information to a method on your ViewModel. No need to over complicate anything.
– Johnny Westlake
yesterday
FWIW, it's still MVVM compliant if you handle the selection change event in your view, that simply forwards the appropriate information to a method on your ViewModel. No need to over complicate anything.
– Johnny Westlake
yesterday
You already have your ViewModel referenced in your code-behind in order to use x:Bind, so I can't think of any reason whatsoever why you can't just use the code-behind event handlers. This does not violate MVVM, not even a little. That said, Xaml Behaviors can probably do what you want.
– Sean O'Neil
yesterday
You already have your ViewModel referenced in your code-behind in order to use x:Bind, so I can't think of any reason whatsoever why you can't just use the code-behind event handlers. This does not violate MVVM, not even a little. That said, Xaml Behaviors can probably do what you want.
– Sean O'Neil
yesterday
You are wright @SeanO'Neil ,that behavior make able what I am going to do.I made MVVM with Command using EventToCommand from this nuget package.
– Allaev Bekzod
19 hours ago
You are wright @SeanO'Neil ,that behavior make able what I am going to do.I made MVVM with Command using EventToCommand from this nuget package.
– Allaev Bekzod
19 hours ago
add a comment |
2 Answers
2
active
oldest
votes
Try to use Windows Template Studio, its solved my problem when combining NavigationView with MVVM
add a comment |
In order to see how to properly use the NavigationView control (including the Data Binding case), please refer to the companion app called XAML Controls Gallery, available in the Windows Store, by Microsoft.
Best regards
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Allaev Bekzod is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53944523%2fuwp-navigationview-navigation-via-mvvm%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Try to use Windows Template Studio, its solved my problem when combining NavigationView with MVVM
add a comment |
Try to use Windows Template Studio, its solved my problem when combining NavigationView with MVVM
add a comment |
Try to use Windows Template Studio, its solved my problem when combining NavigationView with MVVM
Try to use Windows Template Studio, its solved my problem when combining NavigationView with MVVM
answered yesterday
Firman Zulkarnain
214
214
add a comment |
add a comment |
In order to see how to properly use the NavigationView control (including the Data Binding case), please refer to the companion app called XAML Controls Gallery, available in the Windows Store, by Microsoft.
Best regards
add a comment |
In order to see how to properly use the NavigationView control (including the Data Binding case), please refer to the companion app called XAML Controls Gallery, available in the Windows Store, by Microsoft.
Best regards
add a comment |
In order to see how to properly use the NavigationView control (including the Data Binding case), please refer to the companion app called XAML Controls Gallery, available in the Windows Store, by Microsoft.
Best regards
In order to see how to properly use the NavigationView control (including the Data Binding case), please refer to the companion app called XAML Controls Gallery, available in the Windows Store, by Microsoft.
Best regards
answered yesterday
LucaLindholm
331213
331213
add a comment |
add a comment |
Allaev Bekzod is a new contributor. Be nice, and check out our Code of Conduct.
Allaev Bekzod is a new contributor. Be nice, and check out our Code of Conduct.
Allaev Bekzod is a new contributor. Be nice, and check out our Code of Conduct.
Allaev Bekzod is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53944523%2fuwp-navigationview-navigation-via-mvvm%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
FWIW, it's still MVVM compliant if you handle the selection change event in your view, that simply forwards the appropriate information to a method on your ViewModel. No need to over complicate anything.
– Johnny Westlake
yesterday
You already have your ViewModel referenced in your code-behind in order to use x:Bind, so I can't think of any reason whatsoever why you can't just use the code-behind event handlers. This does not violate MVVM, not even a little. That said, Xaml Behaviors can probably do what you want.
– Sean O'Neil
yesterday
You are wright @SeanO'Neil ,that behavior make able what I am going to do.I made MVVM with Command using EventToCommand from this nuget package.
– Allaev Bekzod
19 hours ago