问题:如何将ComboBox的Selected项目的绑定设置为一个属性,将项目列表设置为另一个属性?
的信息:
我有一个我正在为我的公司工作的库存计划,主要针对那些接收货物的人。我设置了一些东西,以便在屏幕的一侧有一个货件清单。当他们选择其中一个时,显示货件上的所有信息,以便进行编辑。一点信息是收到货物的人。我想要它,以便当他们点击货物时,显然收到货物的用户是在组合框中弹出的用户。但我希望组合框包含所有其他用户的列表。
如果不是因为我从数据库中提取用户列表这一点,那就不难了。列表框有一个数据模板,用于从用户数据类型列表中提取适当的信息。我到目前为止所尝试的是在视图模型中有一个集合视图,组合框为其列表绑定,然后是一个单独的属性,它是一个附带出货数据类型的单个用户实例。
我正在根据M-V-VM编程模型在Visual Basic和XAML中编程。
答案 0 :(得分:1)
你的方法没有错。 ViewModel可以公开db中的一组类型,以及绑定到所选项的单独属性,如:
public ObservableCollection<Shipment> AllShipments { get; private set; }
public Shipment SelectedShipment { get; set; }
// Constructor
public MyViewModel()
{
AllShipments = ReadFromDb();
}
就组合框是空的而言
此外 - 如果您希望组合框显示出货对象中的用户,请记住确保您的VM(或其基础)实现INotifyPropertyChanged
,并在SelectedShipment
中引发PropertyChanged事件setter - 这会通过DataBinding将更改传播到View ...
希望这有助于:)
答案 1 :(得分:0)
假设您正在使用Linq-to-SQL,我将回答这个问题:
这是一个常见的PITA问题,User
对象中的Shipment
属性包含对User
对象的引用,该引用与User
对象不同填充ComboBox
的查询,即使它们代表相同的记录。
要解决此问题,您可能希望将用户ComboBox
绑定到与DataContext
列表相同的Shipments
检索到的用户列表。
示例:
class ViewModel
{
public List<User> Users { get; set; }
public List<Shipment> Shipments { get; set; }
public Shipment SelectedShipment { get; set; }
public void ReadShipments()
{
using (var dc = new MyDataContext())
{
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Shipment>(x => x.User);
dc.LoadOptions = dlo;
Shipments = dc.Shipments.ToList();
Users = dc.Users.ToList();
}
}
}