C# 将带有ComboboxColumns的DataGrid绑定到列表
我有一个字典,其中的值用作DataGrid中comboboxColumn的源。任务如下:当用户从组合框中选择适当的项时,不应将键值写入列表。 我的代码:C# 将带有ComboboxColumns的DataGrid绑定到列表,c#,wpf,data-binding,datagrid,C#,Wpf,Data Binding,Datagrid,我有一个字典,其中的值用作DataGrid中comboboxColumn的源。任务如下:当用户从组合框中选择适当的项时,不应将键值写入列表。 我的代码: Dictionary<double, string> scores = new Dictionary<double, string>(); scores.Add(1, "the same"); score
Dictionary<double, string> scores = new Dictionary<double, string>();
scores.Add(1, "the same");
scores.Add(3, "moderate superiority");
scores.Add(5, "strong superiority");
scores.Add(7, "very strong superiority");
scores.Add(9, "extremely superiority");
//define number of alternatives
int num = Alternatives.Children.Count - 1;
//initialize matrix for assessment scores
for (int i = 0; i < num; i++)
{
gridAssessment.Add(new double[num]);
}
//set initial values
for (int i = 0; i < num; i++)
{
gridAssessment[i][i] = scores.ElementAt(0).Key;
}
//define source for assessment grid
grAssessment.ItemsSource = gridAssessment;
grAssessment.AutoGenerateColumns = false;
//add columns to the grid
for (int i = 0; i < num; i++)
{
DataGridComboBoxColumn col = new DataGridComboBoxColumn();
grAssessment.Columns.Add(col);
col.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
//define source for comboboxes
col.ItemsSource = scores;
col.DisplayMemberPath = "Value";
col.SelectedValuePath = "Key";
string a = "[" + i.ToString() + "]";
Binding t = new Binding(a);
t.Mode = BindingMode.TwoWay;
t.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
col.SelectedValueBinding = t;
}
字典分数=新字典();
分数。添加(1,“相同”);
增加(3,“中等优势”);
得分。增加(5,“强优势”);
添加(7,“非常强的优势”);
得分。添加(9,“极端优越”);
//定义备选方案的数量
int num=alternations.Children.Count-1;
//初始化评估分数矩阵
for(int i=0;i
你能帮我装订吗?由于选定值的键未存储在列表中:(我使用了相同的代码并尝试重新创建UI 代码隐藏 List gridAssessment=新列表()
public主窗口()
{
初始化组件();
字典分数=新字典();
分数。添加(1,“相同”);
增加(3,“中等优势”);
得分。增加(5,“强优势”);
添加(7,“非常强的优势”);
得分。添加(9,“极端优越”);
//定义备选方案的数量
int num=3;//alternations.Children.Count-1;
//初始化评估分数矩阵
for(int i=0;i
XAML
我看到显示的值为1,2,3。如果需要设置字符串值,则可能需要更改列表希望这能有所帮助!我将Dictionary更改为ObservableCollection,现在它可以工作了。有什么原因让你在代码中而不是在xaml中这样做吗?@SamTheDev,因为列是动态添加的。这就是为什么我不在XAMLyeap中对它们进行编码,预定义的值会正确显示。但当用户从combobox中选择任何项目时,它是not已与源同步。因此,从源到目标只有单向更新,而不是从目标到源的单向更新。当您从combo中选择值后单击“检查”按钮时,它是否在标签上显示正确的值
public MainWindow()
{
InitializeComponent();
Dictionary<double, string> scores = new Dictionary<double, string>();
scores.Add(1, "the same");
scores.Add(3, "moderate superiority");
scores.Add(5, "strong superiority");
scores.Add(7, "very strong superiority");
scores.Add(9, "extremely superiority");
//define number of alternatives
int num = 3;//Alternatives.Children.Count - 1;
//initialize matrix for assessment scores
for (int i = 0; i < num; i++)
{
gridAssessment.Add(new double[num]);
}
//set initial values
for (int i = 0; i < num; i++)
{
gridAssessment[i][i] = scores.ElementAt(0).Key;
}
//define source for assessment grid
grAssessment.ItemsSource = gridAssessment;
grAssessment.AutoGenerateColumns = false;
//add columns to the grid
for (int i = 0; i < num; i++)
{
DataGridComboBoxColumn col = new DataGridComboBoxColumn();
grAssessment.Columns.Add(col);
col.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
//define source for comboboxes
col.ItemsSource = scores;
col.DisplayMemberPath = "Value";
col.SelectedValuePath = "Key";
string a = "[" + i.ToString() + "]";
Binding t = new Binding(a);
t.Mode = BindingMode.TwoWay;
t.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
col.SelectedValueBinding = t;
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
StringBuilder str1 = new StringBuilder();
foreach (var c in gridAssessment)
{
str1.Append("<");
foreach (var item in c)
{
str1.AppendFormat(" {0} ", item);
}
str1.Append(">");
}
val.Content = str1.ToString();
}
<Grid HorizontalAlignment="Left" VerticalAlignment="Top">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<DataGrid Name="grAssessment" />
<Button Content="Check" Grid.Row="1" Click="Button_Click" />
<Label Name="val" Grid.Row="2" />
</Grid>