2013-04-12 15 views
5

Mam dwa pola tekstowe w widoku siatki WPF. Drugi jest ukryty za pomocą metody w modelu widoku (GetNoteTwoVisibility), jeśli nie ma tekstu do wyświetlenia - nie ma problemu. W tym przypadku jednak chciałbym zmienić rozpiętość kolumn pierwszego pola tekstowego, aby użyć obu kolumn. Próbowałem dodać metodę "GetNoteOneColumnSpan" (zwracając int), ale to nie działa.Wiązanie WPF z 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}" /> 

Czy istnieje sposób, aby to zrobić? Dzięki

Odpowiedz

7

Nie potrzebujesz innej właściwości wiążącej dla Grid.ColumnSpan. Możesz spróbować czegoś takiego:

<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

, który działa idealnie (gdy przypomniałem sobie, że moja metoda widoczności zwróciła enum widoczności, a nie bool!), Dziękuję. – Nick

+0

Twoje powitanie. Mam nadzieję, że masz powód do posiadania właściwości System.Windows.Visibility w swoim ViewModelu niż użycie wartości bool w ViewModel i użycie konwertera w Xaml. – Viv

+0

Bez powodu, zgadnij, że to tylko sposób, w jaki napisano aplikację, zajmie się wykorzystaniem konwerterów, ale jeśli to jest lepsza praktyka, dziękuję – Nick