2017-04-21 2 views
0

Ich habe eine Projektlösung, wie untenWPF-MVVM: Bindung zwischen Usercontrol aus verschiedenen Projekt

solution with different project in MVVM

Das Startfenster ist MainWindowStart.xaml in befindet ProjectStart.View mit Datacontext ProjectStartViewModel.cs.

MainWindowStart.xaml enthält 2 Benutzersteuerelemente (MyUC1.xaml, MyUC2.xaml), die in einem anderen Projekt (Project1) mit Datacontext Project1ViewModel.cs as showen befinden. Die Eigenschaften werden korrekt in InitializeComponent() von MainWindow gebunden, funktionieren aber nicht, wenn sich die Eigenschaft ändert. Es funktioniert gut, wenn der Benutzer Steuerelemente in einem Fenster enthalten ist, die

in einem gewissen Projekt von Benutzersteuerung befindet sich

Dies ist der Code von Immobilien in einem Ansichtsmodell Ansichtsmodell

private int _IndexTabMain; 

    public int IndexTabMain 
    { 
     get { return _IndexTabMain; } 
     set 
     { 
      if (_IndexTabMain != value) 
      { 
       _IndexTabMain = value; 
       this.RaisePropertyChanged("IndexTabMain"); 
      } 

     } 
    } 

und dies ist der Code Immobilien binded in MyUC2.xaml, die aus einer Änderung der Auswahl in MyUC1.xaml

<TextBlock Text="{Binding DataContext.IndexTabMain, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl}}"> 

vorab informiert wird danke Manuel

+0

Als allgemeine Regel gilt, sollten Sie nie explizit die Datacontext eines Usercontrol festgelegt. Dadurch wird effektiv verhindert, dass ein DataContext vom übergeordneten Steuerelement oder Fenster geerbt wird, was normalerweise Ihre Bindungen unterbricht. Siehe z.B. hier: http://stackoverflow.com/a/28982771/1136211 – Clemens

+0

Wo ist die IndexTabMain-Eigenschaft definiert? – mm8

+0

Ihr Benutzersteuerelement sollte DependencyProperties auf ihrer Oberfläche anzeigen, an die Sie Ihr ViewModel binden. Genau wie eine TextBox über eine Text-Eigenschaft verfügt, sollte Ihr Benutzersteuerelement eine Was-Eigenschaft aufweisen, die an die Eigenschaft "Was auch immer" des Ansichtsmodells gebunden ist. – Will

Antwort

0

Wenn IndexTabMain im Ansichtsmodell des übergeordneten Fensters definiert ist, sollten Sie die AncestorType Eigenschaft auf Window gesetzt:

<TextBlock Text="{Binding DataContext.IndexTabMain, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=Window}}"> 
Verwandte Themen