在WPF中显示Datagrid中组合框的值

时间:2012-11-04 00:52:58

标签: c# wpf datagrid

我有以下代码:

XAML:

<DataGrid x:Name="dgData" HorizontalAlignment="Left" Margin="133,96,0,0" VerticalAlignment="Top" Height="174" Width="156" AutoGenerateColumns="False" Grid.Column="1">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Status" Width="100">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox Name="Combo1" Height="22" ItemsSource="{Binding SubjectSubList}" SelectedItem="{Binding SubjectSubList}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

代码隐藏:

public class TicketInfo
{           
    public List<string> SubjectSubList { get; set; }
}

static List<string> resolution = new List<string>();
static List<string> codec = new List<string>();

resolution.Add("1");
resolution.Add("2");

codec.Add("3");
codec.Add("4");

List<TicketInfo> ticketsList = new List<TicketInfo> 
{
    new TicketInfo{ SubjectSubList=resolution},
    new TicketInfo{ SubjectSubList=codec},               
};

我能够在两个不同的组合框中单独显示对象,但我现在不知道我可以检索用户选择的值。 “Selecteditem”已绑定,但如何在代码隐藏中检索值?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

当选择更改时,您分配给控件的SubjectSubList中的

DataContext将会更新。该属性必须同时具有公共setter和getter,因为更新是双向的。

答案 1 :(得分:0)

你需要添加一个SelectedItem属性,所以如果你的组合框是一个字符串列表,那么你可以有一个这样的selectedItem属性:

  public string SelectedSubject { get; set; }

,然后在xaml中将“SelectedSubject”绑定到selecteditem:

        <DataTemplate>
           <ComboBox Name="Combo1" Height="22" ItemsSource="{Binding SubjectSubList}" SelectedItem="{Binding SelectedSubject}"/>
        </DataTemplate>

然后,在您的代码中,您可以随时访问SelectedSubject,其值应该是当时在组合框中选择的任何值。

但是现在你需要数据网格中某一行的选定项目?那么你要么必须在代码参数中传递selectedrow并尝试访问该选定行的该值,要么将SelectedSubject作为SubjectSubList中的属性,这必须是某种对象。希望这会有所帮助。