2013-05-29 56 views
2

我有一個WPF中的ListView從數據庫中獲取數據。我想要的是,當我選中一列時,按下一個按鈕,它將顯示一行爲label.content。這裏就是我有這麼遠,但它不會工作(我刪除了一些項目,如身高等從中ATM):在標籤中顯示一個ListView行

<ListView x:Name="listView" HorizontalAlignment="Left" VerticalAlignment="Top"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=Item1}" Header="Item1"/> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=Item2}" Header="Item2"/> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=Item3}" Header="Item3"/> 
      </GridView> 
     </ListView.View> 

然後在後面部分的代碼:

DataRowView dataRow; 
    int indexInt; 

    indexInt = listView.SelectedIndex; 
    dataRow = listView.Items.GetItemAt(indexInt) as DataRowView; 

    if(dataRow!=null) 
    { 
     labelOne.Content = (dataRow["Item2"]); 
    } 

如果我刪除的數據行!= null檢查,它將顯示此錯誤: 未將對象引用設置爲對象的實例。

任何人都可以幫助我解決這個問題,還是應該以另一種方式解決問題?

回答

1

您應該使用MVVM方法:

- >您ListViewItemsSource財產應綁定到所顯示的集合。
- >(可選)您的ListViewSelectedValue屬性應該綁定到您的ViewModel中的一個屬性,我們稱之爲CurrentRow
- >labelOneContent屬性應該被綁定到CurrentRow(或listView.SelectedValue.Item2,如果你沒有做的可選步驟)

而且你不會有從後面了代碼UI元素進行修補(這是通常是不好的做法的跡象)。實際上,你可能不需要再命名你的控件了。

它應該是這樣的:

<Label name="labelOne" Content="{Binding SelectedValue.Item2, ElementName=listView}" /> 
<ListView x:Name="listView" HorizontalAlignment="Left" VerticalAlignment="Top"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=Item1}" Header="Item1"/> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=Item2}" Header="Item2"/> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=Item3}" Header="Item3"/> 
      </GridView> 
     </ListView.View> 
+0

我必須說,哇...這是那麼容易,我花了谷歌搜索(與嘗試不同的方法)的約4小時,當我終於來了在這裏,我得到了答案,它很簡單!:) 非常感謝! – Renet