C# and WPF - Binding List on ItemsSource on DataGridComboBox

本文关键字:on ItemsSource DataGridComboBox List Binding and WPF | 更新日期: 2023-09-27 17:56:40

我想将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# and WPF - Binding List on ItemsSource on DataGridComboBox

看起来您正在请求 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"/>