2016-02-16 104 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

相关问题