Ahoj,
musím říct, že mi z tvého popisu není úplně zcela jasné o co jde. Každopádně MVVM využívám aktivně s WPF. Možná kdyby si více popsal svůj problém, tak by bylo snazší ti odepsat na konkrétní věc.
Každopádně pokud si vytvoříš okno, dejme tomu ShellView a k tomu ShellViewModel snadno je propojíš takto:
<Window x:Class="MyApp.ShellView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyApp"
Title="Moje Okno"
WindowStartupLocation="CenterScreen" Width="1000" Height="730">
<Window.DataContext>
<local:ShellViewModel/>
</Window.DataContext>
<Grid>
// ...
</Grid>
</Window>
Díky dědičnosti v XML máš zajištěno to, že každý element v okně bude mít nastavený DataContext na tvůj ViewModel.
Samozřejmě se to dá nastavit i jinak, např.:
// metoda napr. v app.xaml.cs
private void Application_Startup(object sender, StartupEventArgs e)
{
ShellView view = new ShellView();
view.DataContext = new ShellViewModel();
view.Show();
}
No když máš zajištěn přístup z okna na ViewModel, tak si do ViewModelu můžeš přidat properties kolik chceš a různě si je bindovat.
// na View
..
<Label Content="{Binding Title}" />
..
// ViewModel
public class ShellViewModel : INotifyPropertyChanged
{
private string _title;
public string Title
{
get { return _title; }
set
{
_title= value;
NotifyPropertyChanged("Title");
}
}
public event PropertyChangedEventHandler PropertyChanged = delegate { };
public void NotifyPropertyChanged(string propName)
{
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
Samozřejmě těch properties tam můžeš mít kopec. Jen nezapomeň na implementaci INotifyPropertyChanged, protože se jinak View nikdy nedoví, že si za běhu něco na ViewModelu změnil.
Pokud konkretizuješ otázku, tak ti budu schopen napsat více. Snad ti toto pomohlo.