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 sichDies 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
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
Wo ist die IndexTabMain-Eigenschaft definiert? – mm8
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