il santino
il santino

Reputation: 117

How to inherit ViewModel class to UserControl?

Suppose that I've a ViewModel class with different property such as:

//MainVm will inherit ViewModel that contains IPropertyChanged implementation
public class MainVM : ViewModel 
{
     publi bool Foo { get; set; } 
}

I instatiated this class on the main controller in this way:

MainController mc;

public MaiWindow()
{
    mc = new MainController(); 
    DataContext = mc;
    InitializeComponent();
}

the MainController have this implementation:

public class MainController : MainVM 
{
    some methods
}

so each time I need to access to a property of MainController on each UserControls I need to do: Application.Current.MainWindow.mc.Foo

and this is't elegant at all.

Is possible access to the property of specific ViewModel without call the code line above?

Thanks.

UPDATE

For add more details and clarification to this question: so in my UserControl I need to access to the Foo property that is part of MainVM. I'm spoke about the UserControl xaml code (not the controller of the UserControl), this is an example:

public partial class ControlName : UserControl
{
    public ControlName()
    {
       InitializeComponent();
    }

    public btnAdd_Click(object sender, RoutedEventArgs e)
    {
       //Suppose that I need to access to the property Foo of MainVM here
       //I need to access to MainWindow instance like this:
       Application.Current.MainWindow.mc.Foo

       //isn't possible instead access to the property directly inherit the class, like:
       MainVm.Foo 
    }
}

Upvotes: 0

Views: 189

Answers (1)

Marco
Marco

Reputation: 1016

In order to get the configuration App-Wide, you could use the

  ConfigurationManager.AppSettings["Whatever"];

These settings are located in the App.Config in the following form

<appSettings>
    <add key="Whatever" value="Hello" />
</apSettings>

But as I undertand, you have a ViewModel that let Users change the settings, in this case you should go for:

Properties.Settings.Default.myColor = Color.AliceBlue; 

You ViewModel could expose this property as:

public Color MyColor
{
    get {
       return Properties.Settings.Default.myColor;
    }

    set {
        Properties.Settings.Default.myColor = value; RaisePropertyChanged();
    }
}

public void Persist()
{
    Properties.Settings.Default.Save();
    // Raise whatever needed !
}

From other ViewModels you can access these setting as well:

Properties.Settings.Default.myColor

Have a look here https://learn.microsoft.com/en-us/dotnet/framework/winforms/advanced/using-application-settings-and-user-settings and here https://learn.microsoft.com/en-us/dotnet/framework/winforms/advanced/how-to-create-application-settings

Upvotes: 1

Related Questions