2013-04-12 88 views
5

我有一個WPF gridview中的兩個文本框。如果沒有要顯示的文本,則在視圖模型(GetNoteTwoVisibility)中使用方法隱藏第二個 - 在那裏沒有問題。在這種情況下,雖然我想將第一個文本框的列跨度更改爲使用兩列。我試着添加'GetNoteOneColumnSpan'方法(返回一個int),但這不起作用。WPF綁定到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}" /> 

有沒有辦法做到這一點?謝謝

回答

7

您不需要Grid.ColumnSpan的另一個綁定屬性。你可以嘗試這樣的:

<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

完美的作品(有一次,我記得我的能見度方法返回的能見度枚舉,而不是一個布爾值!),謝謝。 – Nick

+0

歡迎您。我希望你在ViewModel中有一個使用System.Windows.Visibility屬性的理由,而不是在ViewModel中使用bool值,並在xaml中使用轉換器。 – Viv

+0

沒有理由,猜想它只是如何編寫的應用程序,將考慮轉換器的使用,雖然如果這是更好的做法,謝謝 – Nick