2009-10-19 78 views
3

我想從我在XAML中創建的Gridview中檢索數據。從C#中的Gridview中選定的行獲取數據,WPF

<ListView Name="chartListView" selectionChanged="chartListView_SelectionChanged"> 
    <ListView.View> 
    <GridView> 
     <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" Width="250"/> 
     <GridViewColumn Header="Type" DisplayMemberBinding="{Binding Type}" Width="60"/> 
     <GridViewColumn Header="ID" DisplayMemberBinding="{Binding ID}" Width="100"/> 
    </GridView> 
    </ListView.View> 
</ListView> 

我已經看到了一些這樣的代碼: -

GridViewRow row = GridView1.SelectedRow; 
TextBox2.Text = row.Cells[2].Text; 

但是我的問題是,我的GridView在XAML創建的,未命名的,即我不能(或不知道如何)創建對'gridview1'的引用,因此無法訪問其中的對象。

我可以用c#或XAML命名或創建一個對我的gridview的引用,所以我可以使用上面的代碼?

其次,我可以再由名稱,而不是指數,訪問數組元素是這樣的: -

TextBox2.Text = row.Cells["ID"].Text 

感謝您的幫助。

回答

1

是的,你可以說出你的GridView:

<GridView x:Name="chartGridView"> 
    ... 
</GridView> 

確保包含在窗口定義如下:

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

這將使你從你的C#代碼引用它。

+0

對不起,這是我第一次嘗試。 VS說:在類型GridView中找不到屬性「名稱」 – Will 2009-10-19 10:22:11

+0

這使得它在後面的代碼中可見。有沒有辦法讓它從視圖模型中可見? – Jeff 2013-10-21 16:00:07

+0

@Jeff - 你不應該混淆你的視圖和視圖模型。 – ChrisF 2013-10-21 16:03:49

1

你正在做一些可怕的錯誤。您不應該嘗試從網格單元讀取數據,而是直接從業務對象讀取數據。你應該避免的程序代碼,當一個純粹的XAML解決方案存在:

<TextBox x:Name="TextBox2" Text={Binding SelectedItem.ID, ElementName=chartListView}"/> 

WPF並不打算像你試圖使用。因此讀取單個網格單元是一件骯髒的事情。也就是說,它是這樣的:

string UglyHack(string name) 
{ 
    var columns = (chartListView.View as GridView).Columns; 
    int index = -1; 
    for (int i = 0; i < columns.Count; ++i) 
    { 
     if ((columns[i].Header as TextBlock).Text == name) 
     { 
      index = i; 
      break; 
     } 
    } 
    DependencyObject j = SelectedListView.ItemContainerGenerator.ContainerFromIndex(SelectedListView.SelectedIndex); 
    while (!(j is GridViewRowPresenter)) j = VisualTreeHelper.GetChild(j, 0); 
    return (VisualTreeHelper.GetChild(j, index) as TextBlock).Text; 
} 
相關問題