Regequion

Regequion

  • NA
  • 27
  • 787

How can I retrieve the configuration values in a MainViewModel system

Aug 25 2020 10:49 PM
In WPF I have created a form "Configuration.xaml" to enter the configuration values of my program. It contains a DevExpress "Hamburguermenu" control so that, when clicking on each menu option, different subforms appear, such as "Configuration_General.xaml", with the corresponding TextBox and ComboBox values.

The DevExpress "Hamburguermenu" control introduces the different menu options using the "MainViewModel.cs" system.

"Configuration.xaml" contains a "Save" button that starts the subform "configuracion_save.xaml" which is where there is a process that must collect the TextBox and ComboBox values from each subform in order to store them in a file.

The problem is, I don't know how to retrieve the TextBox and ComboBox values from each subform in order to save them.

configuracion.xaml
---------------------
<dx:ThemedWindow x:Class="Name_MainWindow_Configuracion.MainWindow_Configuracion"
            xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:dxwui="http://schemas.devexpress.com/winfx/2008/xaml/windowsui"
            xmlns:dxwuin="http://schemas.devexpress.com/winfx/2008/xaml/windowsui/navigation"
            xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"
            xmlns:local="clr-namespace:Name_MainWindow"
            mc:Ignorable="d"
            WindowStartupLocation="CenterScreen"
            Loaded="Fcn_OnWindowLoaded" Closing="Fcn_WindowClosing" Closed="Window_Closed"
            Title="Configuración" dx:ThemeManager.ThemeName="Office2016ColorfulSE" Width="850" Height="500">
       
        <Window.DataContext>
            <local:MainViewModel/>
        </Window.DataContext>
       
        <Window.Resources>
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary Source="ItemTemplates.xaml"/>
                    <ResourceDictionary>
                    </ResourceDictionary>
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
        </Window.Resources>
   
        <dxwui:HamburgerMenu x:Name="Form_HamburgerMenu" AvailableViewStates = "Inline" Margin="0,0,2,0" OpenPaneWidth = "190" Visibility="Visible"
               ItemsSource          = "{Binding HamburgerMenuItems}"
               BottomBarItemsSource = "{Binding HamburgerMenuBottomBarItems}"
               IsMenuVisible        = "{Binding IsMenuVisible}"
               SelectedItem         = "{Binding SelectedItem, Mode=TwoWay}"
               NavigationTarget     = "{Binding ElementName=service}">
            <dxwui:HamburgerMenu.Content>
                <dxwui:NavigationFrame>
                    <dxmvvm:Interaction.Behaviors>
                        <dxwuin:FrameNavigationService x:Name="service"/>
                    </dxmvvm:Interaction.Behaviors>
                </dxwui:NavigationFrame>
            </dxwui:HamburgerMenu.Content>
        </dxwui:HamburgerMenu>
    </dx:ThemedWindow>

MainViewModel.cs
---------------------
namespace Name_MainWindow
{  public class MainViewModel : DevExpress.Mvvm.NavigationViewModelBase
    {   public System.Collections.ObjectModel.ReadOnlyCollection<Name_MainWindow.IHamburgerMenuItemViewModel> HamburgerMenuItems { get; }
        public System.Collections.ObjectModel.ReadOnlyCollection<Name_MainWindow.IHamburgerMenuBottomBarItemViewModel> HamburgerMenuBottomBarItems { get; }
        public bool IsMenuVisible
        {   get{ return GetProperty(() => IsMenuVisible); }
            set{ SetProperty(() => IsMenuVisible, value); }
        }
        public IHamburgerMenuItemViewModel SelectedItem
        {   get{ return GetProperty(() => SelectedItem); }
            set{ SetProperty(() => SelectedItem, value, OnSelectedItemChanged); }
        }

        public MainViewModel()
        {  
            HamburgerMenuItems          = new System.Collections.ObjectModel.ReadOnlyCollection<Name_MainWindow.IHamburgerMenuItemViewModel>(InitializeMenuItems());
           
            HamburgerMenuBottomBarItems = new System.Collections.ObjectModel.ReadOnlyCollection<Name_MainWindow.IHamburgerMenuBottomBarItemViewModel>(InitializeBottomBarItems());

            SelectedItem  = HamburgerMenuItems[0];
            IsMenuVisible = true;
        }

        protected virtual System.Collections.Generic.IList<IHamburgerMenuItemViewModel> InitializeMenuItems()
        {   string  Mensaje                 = null;
            var     IHamburgerMenuItem_List = new System.Collections.Generic.List<IHamburgerMenuItemViewModel>();

            // --------------------
            // HOME.
            // --------------------
            Mensaje = "Home";
            IHamburgerMenuItem_List.Add(new NavigationItemModel(Mensaje){ NavigationTarget = typeof(Name_MainWindow_Configuracion.MainWindow_Configuracion_Inicio), Glyph = "../images/configuracion/configuracion_home.png" });
            IHamburgerMenuItem_List.Add(new SeparatorItem());

            // --------------------
            // GENERAL.
            // --------------------
            Mensaje = "General";
            IHamburgerMenuItem_List.Add(new NavigationItemModel(Mensaje){ NavigationTarget = typeof(Name_MainWindow_Configuracion.MainWindow_Configuracion_General), Glyph = "../images/configuracion/configuracion_general.png" });
            IHamburgerMenuItem_List.Add(new SeparatorItem());

            // --------------------
            // SAVE.
            // --------------------
            Mensaje = "Save";
            IHamburgerMenuItem_List.Add(new NavigationItemModel(Mensaje){ NavigationTarget = typeof(Name_MainWindow_Configuracion.MainWindow_Configuracion_Save), IsAlternatePlacementItem = true, Glyph = "../images/configuracion/configuracion_save.png" });

            return IHamburgerMenuItem_List;
        }

        protected virtual System.Collections.Generic.IList<IHamburgerMenuBottomBarItemViewModel> InitializeBottomBarItems()
        {
            return new System.Collections.Generic.List<IHamburgerMenuBottomBarItemViewModel>()
            {   new BottomBarNavigationItemModel()       { NavigationTarget = typeof(Name_MainWindow_Configuracion.MainWindow_Configuracion_Guardar),
                                                           Glyph = "../images/configuracion/configuracion_guardar.png", IsAlternatePlacementItem = true },
                new BottomBarCheckableItemModel()        { Glyph = "check.png" },
                new BottomBarRadioItemModel("RadioGroup"){ Glyph = "Icons/Radio1.png" },
                new BottomBarRadioItemModel("RadioGroup"){ Glyph = "Icons/Radio2.png" }
            };
        }
        void OnSelectedItemChanged()
        {   if (SelectedItem != null)
            {   // IsMenuVisible = HamburgerMenuSelectedItem.Caption != "Simple Page";
            }
        }
    }
}

Configuracion_General.xaml
-------------------------------
<UserControl x:Class="Name_MainWindow_Configuracion.MainWindow_Configuracion_General"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             Background="White"
             mc:Ignorable="d"
             d:DesignWidth="650" d:DesignHeight="450">
    <UserControl.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="..\Templates\Templates.xaml" />
                <ResourceDictionary>
                </ResourceDictionary>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </UserControl.Resources>

    <Grid x:Name="Form_Programa" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
        <Grid x:Name="Form_Superior_Grid">
            <StackPanel Orientation="Horizontal" VerticalAlignment="Top" Margin="0" >
                <!-- User Label. -->
                <Grid x:Name="Form_UsuarioLabel_Grid">
                    <Label x:Name="User_Label" Style="{StaticResource Destacado}" Content="Usuario" Margin="5,10,0,0" Padding="0" VerticalAlignment="Top"/>
                    <Line X1="5" Y1="30" X2="175" Y2="30" Stroke="#A59E9E" StrokeThickness="2" />

                    <!-- User Textbox. -->
                    <TextBox x:Name="User_TextBox" Text="XXXXX" Style="{StaticResource TextBox_10}" Width="100" Height="15" Margin="75,10,0,0" Padding="0,2"
                                 TextWrapping="Wrap" AcceptsReturn="False" HorizontalAlignment="Left" VerticalAlignment="Top" VerticalContentAlignment="Top"/>
                </Grid>
            </StackPanel>

        </Grid>
    </Grid>
</UserControl>

Configuracion_save.cs
------------------------
namespace Name_MainWindow_Configuracion
{
    public partial class MainWindow_Configuracion_Guardar : System.Windows.Controls.UserControl
    {  
        public MainWindow_Configuracion_Guardar()
        {    InitializeComponent();
             this.Page_Load();
        }

        protected void Page_Load()
        {    bool Fcn_Correcto = Fcn_AppDatos();
        }

        private bool Fcn_AppDatos()
        {   bool Fcn_Correcto = false;

            // AT THIS POINT I have to retrieve the values from each subform so that I can save them to a file.

            // For example, in the form "general_configuration.cs" I have to retrieve the TextBox from the "User_TextBox" field.

           
            return Fcn_Correcto;
        }
    }
}

Answers (1)