在Gridview中填充Combobox

时间:2012-06-19 09:12:45

标签: c# wpf listview gridview combobox

我在使用gridview和其中的组合框时遇到了一些问题。

以下是我的ListView控件的代码:

<ListView Height="139" HorizontalAlignment="Left" Margin="10,158,0,0" Name="lvAppointment" VerticalAlignment="Top" Width="250" MinWidth="350">
<ListView.View>
    <GridView>
        <GridViewColumn Header="Appointment" Width="120">
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                    <DatePicker SelectedDate="{Binding Path=Appointment}"/>
                </DataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>
        <GridViewColumn Header="Type" Width="170">
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ???/>
                </DataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>
        <GridViewColumn Header="Done" Width="50">
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                    <CheckBox IsChecked="{Binding Path=Done}" IsThreeState="False"/>
                </DataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>
    </GridView>
</ListView.View>

我通过c#使用以下代码

从sql ce数据库中弹出列表
using (SqlCeCommand sqlCeAppointment = new SqlCeCommand("SELECT appid,appointment,done,apptype.type FROM appointment INNER JOIN apptype ON appointment.refatid = apptype.atid WHERE refeventid = @eventid;", sqlCeConn))
    {
        sqlCeAppointment.Parameters.AddWithValue("@eventid", ((cListEventItem)lvEvent.SelectedItems[0]).id);
        using (SqlCeDataReader sqlCeAppointmentReader = sqlCeAppointment.ExecuteReader())
        {
            lvAppointment.Items.Clear();

            while (sqlCeAppointmentReader.Read())
            {
                lvAppointment.Items.Add(new cListAppointmentItem { id = sqlCeAppointmentReader.GetGuid(sqlCeTerminReader.GetOrdinal("appid")), Appointment = sqlCeAppointmentReader.GetDateTime(sqlCeTerminReader.GetOrdinal("appointment")), Type = sqlCeAppointmentReader.GetString(sqlCeTerminReader.GetOrdinal("type")), Done = sqlCeAppointmentReader.GetByte(sqlCeTerminReader.GetOrdinal("done")) });
            }
        }
    }

我可以很好地浏览列表。但我希望“Type”是一个组合框,以便用户可以选择适当的约会类型(它是一个与事件相关的约会列表)。这个组合框应该填充sql ce数据库(apptype)表中的数据。此表不是静态的,用户可以在此列表中添加和删除项目。

我尝试了一些通过谷歌找到的方法,但失败了。我想我在理解它是如何工作/应该工作时遇到了问题。

我希望有人可以帮助我:(

提前致谢

2 个答案:

答案 0 :(得分:0)

我建议在MainViewModel上获取约会类型列表。然后将ItemsSource的{​​{1}}绑定到该列表,并将ComboBox绑定到AppointmentItem类型。

SelectedItem

答案 1 :(得分:0)

您可以通过定义ObservableCollection类型的属性来实现。 如果集合的数据类型是字符串,那么您可以将其定义为:

 <ComboBox VerticalAlignment="Top"  HorizontalAlignment="Left" ItemsSource="{Binding Path=Types}" SelectedItem="{Binding MainViewModel.Type,Mode=TwoWay}" SelectedValue="{Binding SelectedValue}"  Width="300"  ></ComboBox>

在您的XAML中,您可以将其绑定为:

-----------------