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
绑定为ItemsSource
。 SelectedValue
属性取自其他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
绑定的例子,但这些都不能帮助解决我的问题。
看起来您正在请求 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"/>