2016-02-16 108 views
0

我有一個DataGrid 3列(id,User,MachineID)我正在尋找從這個網格中獲得機器ID。最好我想用一個複選框來選擇多行,但我只需要在一次排序中得到一行。WPF Datagrid從某一行的單元格中選擇一個值

<DataGrid Grid.Column="0" Grid.Row="0" 
      DockPanel.Dock="Bottom" AutoGenerateColumns="False" 
      ItemsSource="{Binding Path=UserList}" SelectionMode="Single" 
      SelectedItem="{Binding SelectedCpuID, Mode=TwoWay}"> 
      <DataGrid.Columns> 
      <DataGridTextColumn Header="ID" Binding="{Binding UserID}"></DataGridTextColumn> 
      <DataGridTextColumn Width="200" Header="User" Binding="{Binding UserName}"></DataGridTextColumn> 
      <DataGridTextColumn Width="210" Header="Machine ID" Binding="{Binding MachineID}"></DataGridTextColumn> 

它綁定到視圖模型,但我得到的對象名稱,而不是行的內容(application.Users)。我試過SelectedItem="{Binding SelectedCpuID.MachineID, Mode=TwoWay}">這也沒有工作。我對WPF和數據綁定相當陌生,所以我一直試圖去關注另一個我們在這裏產生的程序,它做了類似的事情,但是使用了組合框,它似乎與數據網格不一樣。

任何人都知道如何讓這個工作,請讓我知道。 謝謝, 山姆

回答

1

您可能只是缺少顯示的數據網格的列。 DataGrid的ItemsSource(如DataTable)或要呈現給用戶的所有項目的集合(List <>,或其他IEnumerable)。從那裏,你需要定義你想要顯示的每一列,並給予這些特徵(寬度,字體,着色等等)。每列的綁定是一條路徑,因爲它將在UserList的每個條目中找到。

然後,

<DataGrid 
    ItemsSource="{Binding UserList}" 
    AutoGenerateColumns=False > 

    <DataGrid.Columns> 
     <DataGridTextColumn Header="Id" Binding="{Binding Path=Id}" /> 
     <DataGridTextColumn Header="User" Binding="{Binding Path=User}" /> 
     <DataGridTextColumn Header="Machine" Binding="{Binding Path=MachineID}" /> 
    </DataGrid.Columns> 
</DataGrid> 

現在,您的UserList的來源。如果它是一個List(),那麼每個屬性應該可以通過getter/setter,例如...

public class SomeUserClass() 
{ 
    public string Id {get; set;} 
    public string User {get; set;} 
    public string MachineID {get; set; } 
} 
+0

是的,我確實有類似的代碼,我應該包括它在後,抱歉。我想要做的是當行被選中時我想獲取機器ID,以便我可以使用它進行查詢。我將修改我的帖子以顯示欄目的代碼。 –

+0

沒關係,我現在正在工作。你讓我走在正確的軌道上我沒有意識到我的SelectedCpuID屬性被設置爲字符串而不是(用戶)列表 –

+0

@SamLucas,最後一個筆記。你的「SelectedItem」應該是表示同一個類的一個實例的那個,所以當用戶選擇一個記錄時,整個對象實例將在你的「SelectedCpuID」屬性中。從那裏,您可以使用SelectedCpuId.MachineID(或其任何部分)來查詢目的。 – DRapp

相關問題