2013-04-12 11 views
5

Ho due caselle di testo in una griglia WPF. Il secondo è nascosto usando un metodo sul modello di vista (GetNoteTwoVisibility) se non c'è testo da mostrare - nessun problema lì. In questo caso, tuttavia, vorrei modificare l'estensione della colonna della prima casella di testo per utilizzare entrambe le colonne. Ho provato ad aggiungere un metodo 'GetNoteOneColumnSpan' (restituendo un int) ma questo non funziona.Collegamento WPF a Grid.ColumnSpan

<TextBox Name="Note1" Grid.Column="0" Text="{Binding NotesView.NoteOne}" Grid.ColumnSpan="{Binding NotesView.GetNoteColumnSpan}" /> 
<TextBox Name="Note2" Grid.Column="1" Text="{Binding NotesView.NoteTwo}" Visibility="{Binding NotesView.GetNoteTwoVisibility}" /> 

C'è un modo per farlo? Grazie

risposta

7

Non è necessaria un'altra proprietà di associazione per Grid.ColumnSpan. Puoi provare qualcosa del tipo:

<TextBox Name="Note1" 
      Grid.Column="0" 
      Text="{Binding NotesView.NoteOne}"> 
    <TextBox.Style> 
    <Style TargetType="{x:Type TextBox}"> 
     <Setter Property="Grid.ColumnSpan" 
       Value="1" /> 
     <Style.Triggers> 
     <DataTrigger Binding="{Binding NotesView.GetNoteTwoVisibility}" 
         Value="False"> 
      <Setter Property="Grid.ColumnSpan" 
        Value="2" /> 
     </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    </TextBox.Style> 
</TextBox> 
<TextBox Name="Note2" 
      Grid.Column="1" 
      Text="{Binding NotesView.NoteTwo}" 
      Visibility="{Binding NotesView.GetNoteTwoVisibility}" /> 
+0

che funziona perfettamente (una volta ricordato che il mio metodo Visibility ha restituito un enumerato Visibility e non un bool!), Grazie. – Nick

+0

Benvenuto. Spero che abbiate un motivo per avere proprietà System.Windows.Visibility nel ViewModel piuttosto che usare un valore bool nel ViewModel e utilizzare un convertitore in xaml. – Viv

+0

Nessun motivo, suppongo sia solo come è stata scritta l'app, guarderemo l'uso dei convertitori anche se è meglio fare pratica, grazie – Nick