view.DataContext = viewModel;
|
|
<Window class="MyWindow"
...
xmlns:my="clr-namespace:MyNamespace.Interfaces;assembly=MyNamespaeDll"
>
<my:VM x:Key="MyVM" />
<ControlXX
ItemsSource="{Binding Source={StaticResource MyVM},
Path=MySampleCollectionProp}" />
// @edit: vergessen: Zugriff vom Code behind - für Befüllung
private VM GetVMResource
{
return (VM) FindResource("MyVM");
}
// z. B.:
VM myVM = GetVMResource();
myVM.Fill();
|
|
[Import(ViewModelTypes.ProduktPickerViewModel)]
public object ViewModel
{
set
{
DataContext = value;
}
}
[Export(ViewModelTypes.ProduktPickerViewModel)]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class ProduktPickerViewModel : ViewModelBase
CompositionInitializer.SatisfyImports(this);ausgeführt werden.
public const string ProduktPickerViewModel = "ProduktPickerViewModel";
|
|
|
|
|
Natürlich sollte der Aufruf von Fill() gecached werden, falls nötig.
GetVMResource holt sich die Resource aus XAML = Instanziertes Objekt. Mit dem Einbinden des VM-Namespaces kannst du das VM in XAML verwenden, Path wird wie bei allen anderen Klassen auch immer zur Laufzeit ausgewertet. Falls du dafür eine Lösung gesucht hast wäre mir keine bekannt, aber das liegt wie gesagt nicht daran, dass VM eine selbst erstellte Klasse ist, sondern works as designed. – Maria Simlinger 17.02.2011
|
public partial class ContactWindow : UserControl, IContactView
{
public void BindToViewModel(ContactWindowViewModel viewModel)
{
_viewModel = viewModel;
DataContext = viewModel;
}
}
public class ContactWindowViewModel: INotifyPropertyChanged
{
public ContactWindowViewModel(IContactView view, IMainViewModel mainViewModel)
{
_view = view;
_mainViewModel = mainViewModel;
_view.BindToViewModel(this);
}
}
<Grid x:Name="LayoutRoot" d:DataContext="{d:DesignData /SampleData/ContactSampleData.xaml}"/><SilverWave_Core_ViewModel:ContactWindowViewModel xmlns:SilverWave_Core_ViewModel="clr-namespace:SilverWave.Core.ViewModel;assembly=SilverWave.Core" Email="Nam aliquam class aenean curae" IsValid="True" Message="Sed integer cras maecenas mauris" Name="Dis duis quisque"/>
|
|
public partial class Control
{
#region dependency properties
private static readonly DependencyProperty ModelProperty = DependencyProperty.Register(
"Model",
typeof(Model),
typeof(Control),
new PropertyMetadata(OnModelChanged));
private static void OnModelChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
}
#endregion
#region properties
public Model Model
{
get { return (Model)GetValue(ModelProperty); }
set { SetValue(ModelProperty, value); }
}
#endregion
public Control()
{
InitializeComponent();
}
}
<myXmlns:Control
Name="root"
x:Class="Tis.Modules.AffiliateManagement.Affiliate.View"
xmlns:myXmlns="clr-namespace:...">
...
<TextBox Text={Binding ElementName=root, Path=Model.MyPath}/>
...
</myXmlns:Control>
|
|