Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF选定值,显示成员路径与列表框和组合框不一致_C#_Wpf - Fatal编程技术网

C# WPF选定值,显示成员路径与列表框和组合框不一致

C# WPF选定值,显示成员路径与列表框和组合框不一致,c#,wpf,C#,Wpf,我有一个名为DropDownIndividuals()的存储过程,它是使用LINQ创建的。 存储过程返回FullName和Case\u Number。我想将SelectedValuePath设置为存储过程中的Case\u Number列。这就是我为一个列表框所做的,并且它是有效的 private void listBox1_Loaded(object sender, RoutedEventArgs e){ using (ToolboxDataContext toolboxDB = new

我有一个名为
DropDownIndividuals()
的存储过程,它是使用LINQ创建的。 存储过程返回
FullName
Case\u Number
。我想将
SelectedValuePath
设置为存储过程中的
Case\u Number
列。这就是我为一个列表框所做的,并且它是有效的

private void listBox1_Loaded(object sender, RoutedEventArgs e){
    using (ToolboxDataContext toolboxDB = new ToolboxDataContext())//this is linq in action
    {
         var x = toolboxDB.DropDownIndividuals().ToList();//convert to a list
         listBox1.ItemsSource = x;  //bind the data 
         listBox1.SelectedValuePath = "Case_Number";
         listBox1.DisplayMemberPath = "FullName";

         Console.WriteLine(listBox1.SelectedValue.ToString());
         //Result:it shows the case number of the person the user picks.
    }
}
现在我对下拉组合框做同样的事情,但它不起作用

private void individualDropDown_Loaded(object sender, RoutedEventArgs e)
{
    using (ToolboxDataContext toolbox = new ToolboxDataContext())
    {
        var individualDropDownBox = toolbox.DropDownIndividuals().ToList();
        individualDropDown.ItemsSource = individualDropDownBox;
        individualDropDown.DisplayMemberPath = "FullName";
        individualDropDown.SelectedValuePath = "Case_Number";
        Console.WriteLine(individualDropDown.SelectedValue.ToString());
    }
}

为什么??我怎样才能解决这个问题?

为什么这么混乱?您甚至没有按相同的顺序设置属性,这相当于:


…并显示与预期相同的ID


编辑:在启动时,两个控件的选定值都是
null

为什么如此混乱?您甚至没有按相同的顺序设置属性,这相当于:


…并显示与预期相同的ID


编辑:在启动时,两个控件的选定值都是
null

您是正确的,在
列表框
组合框
选定值
处理方式之间存在排序不一致。对于
列表框
,加载时,如果它具有焦点,则
SelectedValue
将对应于数据源中的第一项。对于
组合框
,即使它有焦点并且数据源提供项目,默认的
SelectedValue
也将在
加载的事件处理程序中取消设置


这种行为是故意的。要使组合框
的行为类似于列表框设置组合框,请选择索引至
“0”
,在XAML中定义组合框

您是正确的,对于
ListBox
ComboBox
处理
SelectedValue
的方式存在排序不一致。对于
列表框
,加载时,如果它具有焦点,则
SelectedValue
将对应于数据源中的第一项。对于
组合框
,即使它有焦点并且数据源提供项目,默认的
SelectedValue
也将在
加载的事件处理程序中取消设置

这种行为是故意的。要使组合框
的行为类似于列表框设置组合框,请选择索引至
“0”
,在XAML中定义组合框

试试这个:

MetroAreaList metroAreaList = _presenter.GetMetroArea();
foreach (MetroArea metroArea in metroAreaList) {
    lstMetroArea.DisplayMemberPath = "Name";
    lstMetroArea.SelectedValuePath = "ID";
    lstMetroArea.Items.Add(metroArea);
}
它正在工作……

试试这个:

MetroAreaList metroAreaList = _presenter.GetMetroArea();
foreach (MetroArea metroArea in metroAreaList) {
    lstMetroArea.DisplayMemberPath = "Name";
    lstMetroArea.SelectedValuePath = "ID";
    lstMetroArea.Items.Add(metroArea);
}

它正在工作……

您的班级应该是公开的:

public class Place
{
    public string Name { get; set; }
    public string Id { get; set; }
}
foreach (var y in Lists)
{
    listBox1.DisplayMemberPath = "Name";
    listBox1.SelectedValuePath = "Id";
    // Console.WriteLine(y.Case_Number.ToString());
    listBox1.Items.Add(y);
}

你的班级应该是公开的:

public class Place
{
    public string Name { get; set; }
    public string Id { get; set; }
}
foreach (var y in Lists)
{
    listBox1.DisplayMemberPath = "Name";
    listBox1.SelectedValuePath = "Id";
    // Console.WriteLine(y.Case_Number.ToString());
    listBox1.Items.Add(y);
}


“不行”你可以做得更好。什么不起作用?你以为会发生什么,结果又发生了什么?如果你解释问题,人们会更有可能提供帮助(并且能够更好地提供帮助)。好的,当我从组合框中选择某人时,它应该显示案例编号。例如:组合框有两个值“Jay”和“Rodrigo”。如果我选择Jay,它会在控制台上显示他的病例编号。假设他的案例号是54444。它做什么呢?它说对象引用没有设置为行控制台的对象实例。WriteLine(individualDropDown.SelectedValue.ToString());无论如何,只要知道如何将displaymemberpath和selectedvaluepath添加到组合框以及如何访问其中的值就足够了。“不起作用”您可以做得更好。什么不起作用?你以为会发生什么,结果又发生了什么?如果你解释问题,人们会更有可能提供帮助(并且能够更好地提供帮助)。好的,当我从组合框中选择某人时,它应该显示案例编号。例如:组合框有两个值“Jay”和“Rodrigo”。如果我选择Jay,它会在控制台上显示他的病例编号。假设他的案例号是54444。它做什么呢?它说对象引用没有设置为行控制台的对象实例。WriteLine(individualDropDown.SelectedValue.ToString());无论如何,只要知道如何向组合框添加displaymemberpath和selectedvaluepath以及如何访问其中的值就足够了。我仍然遇到对象引用问题,请注释掉调试语句,然后运行程序。组合框是否选择第一个名称?为
individualDropDown\u SelectionChanged
添加处理程序以查看更改的发生。我仍然遇到对象引用问题,请注释掉调试语句,然后运行程序。组合框是否选择第一个名称?为
individualDropDown\u SelectionChanged
添加一个处理程序以查看更改的发生。在itemsource中,如果我有一个名为toolbox的linq类,它的StoredProcess名为dropdownindividuals(),我是否将Name=“lbData”ItemsSource=“{Binding toolbox}”?这将不起作用,要绑定到通过方法调用检索的一组对象,您可以使用。好的,我想我将研究对象数据提供程序,看看这会给我带来什么。我不明白为什么我必须使用xaml,我不能只绑定individualDropDown.DisplayMemberPath=“FullName”;直接从codebehind。它不应该真的有什么区别。这个XAML可能只是不关心该值在任何时候是否为
null
。我只是想说明,到目前为止,我没有任何问题/看不出有什么不同。为什么不在调用
ToString()
之前检查null?(编辑:我刚检查过,两个控件的开头都是
SelectedValue==null
)是的,它将是null,因为如果我有一个名为toolbox的linq类,它的StoredProcess名为DropDownPersons(),我是否放置Name=“lbData”ItemsSource=”从itemsource中的sql Server获取数据{Binding Toolbox}”??绑定到一组对象时,这不起作用