为什么我的数据绑定不起作用?

时间:2012-02-06 10:07:23

标签: c# wpf xaml

第一次尝试数据绑定,但有些东西不起作用。我正在尝试使用此数据库列中的项列表填充组合框。我的数据集ds显示它有内容(调试器显示它有大约1500的数量,应该在那里的项目数),如果我使用相同的连接字符串与阅读器,我可以打印出所有的应该出现在组合框中的东西。虽然组合框空洞,任何想法?

<ComboBox Height="23" HorizontalAlignment="Left" Margin="24,318,0,0" Name="comboBox2" VerticalAlignment="Top" Width="190" IsEditable="True" >
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding clt}" Width="100" />
                </StackPanel>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>

现在是C#

DataSet ds = new DataSet();

        string con_string = "user id=sql;password=pass;Server=xxx.xxx.xxx.xxx,xxxx;Database=db;Trusted_Connection=False;connection timeout=15";
        string command_string = "SELECT clt FROM Client";
        SqlConnection sql_con = new SqlConnection(con_string);

            SqlCommand command = new SqlCommand(command_string, sql_con);
            SqlDataAdapter sqlDa = new SqlDataAdapter();
            sqlDa.SelectCommand = command;
            sqlDa.Fill(ds);
            comboBox2.DataContext = ds.Tables[0].DefaultView;

所有代码都没有任何例外地执行。

2 个答案:

答案 0 :(得分:1)

在组合框的XAML声明中添加ItemsSource="{Binding}"(首选方式)

或做comboBox2.ItemsSource = ds.Tables[0].DefaultView;(非常傻,但确实有效)

那就是说,请注意,这不是最好的做法。您应该拥有一个ViewModel,它通过命令保存特定于视图的数据及其逻辑。

如果你要绑定它,ViewModel需要实现INotifyPropertyChanged。通常,您在ViewModel中有一个ObservableCollection,并使用查询结果填充它。然后你就会绑定它。

答案 1 :(得分:0)

编写此代码: -

    SqlDataAdapter sqlDa = new SqlDataAdapter(command_string,sql_con);
        sqlDa.Fill(ds);

        comboBox2.DataSource = ds.Tables[0];
        comboBox2.DisplayMember = "clt";

这将显示结果。