I am searching for simple way to show usercontrol when diffrent ribbontab is selected.
This is my xaml:
<ribbon:RibbonWindow x:Class="msr.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ribbon="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary"
xmlns:msrlib="clr-namespace:msrlib;assembly=msrlib"
xmlns:msrui="clr-namespace:msr.View.Controls"
msrlib:DialogService.IsRegisteredView="True"
Title="MainWindow"
Height="700"
Width="1260"
MaxHeight="700"
MaxWidth="1260">
<DockPanel>
<ribbon:Ribbon DockPanel.Dock="Top" Title="App">
<ribbon:RibbonTab Header="Tab1" IsSelected="True">
<ribbon:RibbonGroup>
<ribbon:RibbonToggleButton IsChecked="True" Command="{Binding ChangeAnalisysView}" CommandParameter="Analisys" SmallImageSource="Images\en\ribbon_button_jan16.png" LargeImageSource="Images\en\ribbon_button_jan32.png" Label="Label1"/>
<ribbon:RibbonToggleButton Command="{Binding ChangeAnalisysView}" CommandParameter="AnalisysZestawienieUmow" SmallImageSource="Images\en\ribbon_button_jan16.png" LargeImageSource="Images\en\ribbon_button_jan32.png" Label="Label2"/>
</ribbon:RibbonGroup>
</ribbon:RibbonTab>
<ribbon:RibbonTab Header="Użytkownicy" x:Name="Users">
<ribbon:RibbonGroup>
<ribbon:RibbonButton Command="{Binding UsersViewModel.AddUserCommand}" SmallImageSource="Images\en\ribbon_button_jan16.png" LargeImageSource="Images\en\ribbon_button_jan32.png" Label="Nowy użytkownik"/>
<ribbon:RibbonButton Command="{Binding UsersViewModel.EditUserCommand}" SmallImageSource="Images\en\ribbon_button_jan16.png" LargeImageSource="Images\en\ribbon_button_jan32.png" Label="Edytuj"/>
<ribbon:RibbonButton Command="{Binding UsersViewModel.DeleteUserCommand}" SmallImageSource="Images\en\ribbon_button_jan16.png" LargeImageSource="Images\en\ribbon_button_jan32.png" Label="Usuń"/>
</ribbon:RibbonGroup>
</ribbon:RibbonTab>
</ribbon:Ribbon>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ContentControl Visibility="{Binding CurrentView, Converter={StaticResource StringToVisibilityConverter}, ConverterParameter=Analisys}">
<msrui:Analysis Grid.Row="0" DataContext="{Binding AnalisysViewModel}"/>
</ContentControl>
<ContentControl Visibility="{Binding CurrentView, Converter={StaticResource StringToVisibilityConverter}, ConverterParameter=Users}">
<msrui:Users Grid.Row="0" DataContext="{Binding UsersViewModel}"/>
</ContentControl>
<ContentControl Visibility="{Binding CurrentView, Converter={StaticResource StringToVisibilityConverter}, ConverterParameter=AnalisysZestawienieUmow}">
<msrui:AnalisysZestawienieUmow Grid.Row="0" DataContext="{Binding AnalisysZestawienieUmowViewModel}"/>
</ContentControl>
</Grid>
</DockPanel>
</ribbon:RibbonWindow>
And my MainWindowViewModel:
class MainWindowViewModel : ViewModelBase
{
//TODO ICommand for navigation
public MainWindowViewModel()
{
HideWorkspace = true;
AnalisysViewModel = new Analisys();
UsersViewModel = new UsersViewModel();
AnalisysZestawienieUmowViewModel = new AnalisysZestawienieUmow();
CurrentView = "Analisys";
}
public Analisys AnalisysViewModel { get; private set; }
public UsersViewModel UsersViewModel { get; private set; }
public AnalisysZestawienieUmow AnalisysZestawienieUmowViewModel { get; private set; }
public string CurrentView { get; set; }
}
I planned to use "CurrentView" for setting visibility of usercontrols that should be shown. For this I am using my own StringToVisibilityConverter:
public class StringToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var s = value as string;
if (string.IsNullOrEmpty(s)) {
return Visibility.Collapsed;
};
//value is not empty
string param = (string)parameter;
//no param, show
if (string.IsNullOrEmpty(param))
{
return Visibility.Visible;
}
//got param
if (s == param) return Visibility.Visible;
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
ribbon:RibbonToggleButton has Command property, so I can create ICommand in main viewmodel and set CurrentView property. I have no idea how to create similar command for RibbonTab.
Bind the RibbonTab's IsSelected property to a property in the ViewModel:
public bool Tab1Selected {
get { return tab1Selected; }
set { tab1Selected = value;
if (tab1Selected) {
CallMyMthod();
}
}
}