【问题标题】:C# and WPF - Binding List on ItemsSource on DataGridComboBoxColumnC# 和 WPF - DataGridComboBoxColumn 上 ItemsSource 上的绑定列表
【发布时间】:2013-01-14 21:52:47
【问题描述】:

我想将List(包含来自LINQ 查询的数据)与DataGridComboBoxColumn 绑定为ItemsSourceSelectedValue 属性取自其他 List,数据为整个 DataGrid

XAML:

<DataGrid x:Name="DG1" x:Uid="DG1" AutoGenerateColumns="False" AlternationCount="2" SelectionMode="Single" Margin="0,5,0,0" HorizontalAlignment="Stretch">
<DataGrid.Columns>
//...
<DataGridComboBoxColumn ItemsSource="{Binding MyValueItem}" SelectedItemBinding="{Binding Source="{StaticResource myvalue}" Header="Values" Width="Auto"/>

C#:

public class ValuesInfo
{
    public int id { get; set; }
    public string number { get; set; }
    public string myvalue { get; set; }
}

public class MyValueItems : List<string>
{
}

public partial class MyWindow : Window
{
    public MyValueItems MyValueItem { get; set; }

    public MyWindow()
    {
        InitializeComponent();  
    }

    private void MyWindow_Load(object sender, RoutedEventArgs e)
    {
        MyValueItem = new MyValueItems();
        sqlDataContext dc = new sqlDataContext();
        var allValueNames = (from p in dc.Names
                               orderby p.id ascending
                               select p.name);

        MyValueItem.AddRange(allValueNames);
        DG1.DataContext = MyValueItem;
    }

    public void LoadValues()
    {
        List<ValuesInfo> ValueList = new List<ValuesInfo> { };
        //...

        for (int i = 1; i <= (int)rdr[0]; i++)
        {
            var dbset = (from p in dc.Values
                         where p.id == i
                         orderby p.id ascending
                         select p).Single();

            var ValueName = (from p in dc.Names
                             where p.id == dbset.valueId
                             select p.name).Single();

            ValuesInfo valueItem = new ValuesInfo
            {
                id = dbset.id,
                number = dbset.number,
                myvalue = valueName
            };
            ValueList.Add(valueItem);
        }

        DG1.ItemsSource = ValueList;
    }
}

这里有很多 DataGridComboBoxColumn 绑定的示例,但这些都不能帮助解决我的问题。

【问题讨论】:

    标签: c# wpf list datagrid datagridcomboboxcolumn


    【解决方案1】:

    您似乎在请求 DataContext 上名为 MyValueItem 的属性。

    <DataGridComboBoxColumn ItemsSource="{Binding MyValueItem}" SelectedItemBinding="{Binding Source="{StaticResource myvalue}" Header="Values" Width="Auto"/>
    

    但是您将 MyValueItem 的值作为 DataContext 传递。

    DG1.DataContext = MyValueItem;
    

    您需要将 DataContext 设置为具有“MyValueItem”属性的项目。将上面的行替换为下面的行。

    DG1.DataContext = this;
    

    其中“this”是具有 MyValueItem 属性的 MyWindow。

    ...

    或者,您可以将绑定更改为以下内容,这会将您传递给它的任何项目作为绑定源。

    <DataGridComboBoxColumn ItemsSource="{Binding}" SelectedItemBinding="{Binding Source="{StaticResource myvalue}" Header="Values" Width="Auto"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多