2016-06-24 7 views
0

Programmierer, Ich habe eine ItemsSource-Bindung zur Laufzeit ändern müssen. In meinem DataGrid möchte ich Artikel vom Typ "Akte" sehen. Dieser Code im Ansichtsmodell funktioniert:Bindung an DependencyProperty vom Typ Bindung

#region DependencyProperty AktenDataGrid 
    public static readonly DependencyProperty AktenDataGridProperty = 
     DependencyProperty.Register("AktenDataGrid", typeof(DataGrid), typeof(UebersichtVM)); 

    public DataGrid AktenDataGrid 
    { 
     get { return (DataGrid)GetValue(AktenDataGridProperty); } 
     set 
     { 
      SetValue(AktenDataGridProperty, value); 
      OnPropertyChanged(); 
     } 
    } 
    #endregion DependencyProperty AktenDataGrid 

    private void OnSammelakteChangedCommand(object parameter) 
    { 
     Binding aktenBinding; 

     if (null == AktenDataGrid || null == parameter) 
     { 
      aktenBinding = new Binding("AngemeldeterBenutzer.AktenBenutzer"); 
     } 
     else 
     { 
      aktenBinding = new Binding("SelectedItem.Sammelakte.SammelakteAkten"); 
      aktenBinding.ElementName = "sammelaktenDataGrid"; 
     } 

     AktenDataGrid.SetBinding(DataGrid.ItemsSourceProperty, aktenBinding); 
    } 

Der Befehl durch Änderung der Auswahl in meinem sammelaktenDataGrid ausgeführt wird. Es ist notwendig, die Eigenschaft AktenDataGrid mit dem betroffenen DataGrid in Code-Behind meines UserControl zu initialisieren.

Ich möchte mein ViewModel so ändern, dass es eine DependencyProperty AktenDataGridBinding von Type Binding bereitstellt und ich ItemSource an diese Property binden möchte. Ich habe es ausprobiert, aber es funktioniert nicht. Können Sie mir helfen?

+3

kann ich die Menge der Menschen vorstellen, jetzt Kopieren/Einfügen @ MarkusHütter Kommentar in Google Übersetzen ... :) - FYI, es (nicht sehr gut) auf Englisch übersetzt: „Tipp: Ich würde immer Programm auf Englisch Also Klassen/Variablen/Funktionsnamen. Erleichtert den nichtdeutschsprachigen Menschen Ihren Code zu verstehen. " –

+3

@Markus Noch ein kleiner Tipp, Kommentare zu StackOverflow (als Fragen und Antworten) sollten * immer in Englisch * sein damit jeder es kann Folgen. – Clemens

+0

Haha, tut mir leid, dass =) –

Antwort

0

Ich bin mir nicht ganz klar, was Sie erreichen wollen, aber vielleicht ist es:

Diese SelectedItem.Sammelakte.SammelakteAkten im DataGrid zeigen wird, wenn es null ist, in welchem ​​Fall es AngemeldeterBenutzer.AktenBenutzer zeigen.

<DataGrid ItemsSource="{Binding Path=SelectedItem.Sammelakte.SammelakteAkten, ElementName=sammelaktenDataGrid}"> 
    <DataGrid.Style> 
     <Style TargetType="DataGrid"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=SelectedItem.Sammelakte.SammelakteAkten}" Value="{x:Null}"> 
        <Setter Property="ItemsSource" Value="{Binding Path=AngemeldeterBenutzer.AktenBenutzer}" /> 
       </DataTrigger>          
      </Style.Triggers> 
     </Style> 
    </DataGrid.Style>    
</DataGrid> 
+0

Sieht gut aus, funktioniert aber nicht :-( –

+0

Ich habe einige Variationen versucht, inkl. Ändern der Bindungen und Ändern des Vergleichswerts zu x: Typ. Es scheint, dass nichts ausgelöst wird. –