gpt4 book ai didi

c# - 来自列表 的组合框 DisplayMemberPath
转载 作者:行者123 更新时间:2023-12-03 10:25:49 24 4
gpt4 key购买 nike

我正在尝试将列表绑定(bind)到 ComboBox 并使用 displaymemberpath 来显示值。

这是我的 XAML:

<ComboBox x:Name="ComboBoxCommissieGroep" 
ItemsSource="{Binding Commissies}"
DisplayMemberPath="CommissieGroep">

View 模型:

我的 ViewModel 检索“佣金”列表
private async Task LoadData()
{
commissies = new ObservableCollection<object>(await LoginBLL.GetCommissiesList());
}

模型:
public class InloggenBO : ObservableObject
{
private int lidNummer;

public int LidNummer
{
get => lidNummer;
set
{
lidNummer = value;
NotifyPropertyChanged();
}
}

private string commissieGroep;

public string CommissieGroep
{
get => commissieGroep;
set
{
commissieGroep = value;
NotifyPropertyChanged();
}
}

private string wachtwoord;

public string Wachtwoord
{
get => wachtwoord;
set
{
wachtwoord = value;
NotifyPropertyChanged();
}
}
}

我的代码数据库方法:
该方法创建已从数据库中检索到的数据集列表。这就是为什么它是对象类型而不是 InloggenBO
protected Task<List<object>> ExecuteReader(string SqlString)
{
// Read to dataset
DataSet dataset = new DataSet();

using (var conn = new SqlConnection(ConnectionString))
using (var adapter = new SqlDataAdapter(new SqlCommand(SqlString, conn)
{
// Set commandtype
CommandType = CommandType.Text
}))
{
// Open connection
conn.Open();
// Fill dataset
adapter.Fill(dataset);
// Close connection
conn.Close();
}

return Task.FromResult(ToList(dataset));
}

创建列表对象的方法
private List<object> ToList(DataSet dataSet)
{
var list = new List<object>();

foreach (var dataRow in dataSet.Tables[0].Rows)
{
list.Add(dataRow);
}
return list;
}

我已将我的 DataContext 设置为 viewmodel,并且我知道绑定(bind)有效,因为在我的组合框中没有显示成员路径它说:“System.Data.Datarow”。那么我必须在 displaymemberpath 中放入什么才能显示它的值?

最佳答案

由系统完成的绑定(bind)过程分两部分完成。第一部分是一个目标对象,我的意思是它未知的对象,该对象由 DataContext 提供的控制。

如果我控制没有DataContext设置时,它会继承 XAML 中指定的父控件,如果它也是 null,则该过程会重复自身,直到最终获取页面的数据上下文。

绑定(bind)的第 2 步是当该对象不为空时,它会从绑定(bind)语句本身给出的绑定(bind)提示中反射(reflect)到属性。

因此,在您的情况下,它正在寻找一个名为 Commissies 的属性。关闭数据上下文。如果该属性不为 null 并且是一个列表,则成功绑定(bind)到列表后的组合框会尝试查找并显示名为 CommissieGroep 的属性在要显示的每一行中。

在 Combobox 的情况下,必须符合三件事才能正确显示数据。

您似乎没有正确的类型列表(或可观察的列表)来进行正确的数据绑定(bind)和显示;修复它将解决问题。

关于c# - 来自列表<object> 的组合框 DisplayMemberPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53524439/

24 4 0