我对C和所有的MVVM都很陌生,我试图解决我的问题,但是经过几天的搜索没有结果,所以我在这里写。我有预定和增加宿舍的计划。首先,您可以在一个视图页面上添加一个招待所--它将把它添加到SQLite数据库中,然后添加到旅馆列表中。在第二视图页上,我得到了预订宿舍的公式。当选择你想预订的旅社时,我有一个有招待所列表的列表。我将ItemSource绑定到列表(宿舍列表),这样我就可以看到那里的所有宿舍,但是当我想将SelectedItem绑定到NewReservation.HostelName时,它不会做任何事情。下面是listview的代码:
<StackPanel Orientation="Horizontal" Margin="0,0,0,0">
<TextBlock Text="Hostel name" Width="160" Margin="12,12,12,12" Height="20" Foreground="Black" FontFamily="Microsoft JhengHei Light" FontSize="18" />
<ListView Margin="10,0,0,0" Width="223" ItemsSource="{Binding List}" SelectedItem="{Binding NewReservation.hostelName, Mode=TwoWay}" Height="100" Background="#FFD3DCC1" Foreground="#FF183440" RequestedTheme="Dark" Padding="5,5,5,0">
<ListView.DataContext>
<viewModel:ViewModel/>
</ListView.DataContext>
</ListView>
</StackPanel>该程序以MVVM的形式运行,因此在ViewModel中,我定义了以下新的预订:
public Reservation NewReservation
{
get { return _newReservation; }
set
{
_newReservation = value;
NotifyPropertyChanged("NewReservation");
}
}此外,我还有一个名为“预订”的类,它包含许多字段--但我只想更新hostelName,以便当用户预订宿舍时,他只能从招待所的列表视图中进行选择,所选的项目将宿舍的名称绑定到NewReservation.hostelName --而且Mode=TwoWay也在那里,所以我认为它应该真的能工作。
问题是,当我还调试这个程序并一步一步地遍历每一行代码时,我发现它不会填充NewReservation.hostelName。我也在ComboBox上尝试过这一点,但也没有结果。有趣的是,我还有其他的listview --只用于查看招待所的细节(用户从listview中选择一个招待所,然后显示文本块中的数据--这很好)。但我真的不知道如何从listview向NewReservation发送该旅社的名称。当我像TextBox一样使用它时--因此用户必须手动输入Hostel的名称--它工作得很好--它将文本从textbox绑定到NewReservation.hostelName,并且一切正常工作。但出于某种原因我不能用列表箱或组合框来做这件事。
我还在想,我将在视图模型中创建一个SelectedHostelReservation,并绑定到这个家伙,然后将数据从它发送到NewReservation.hostelName --但这让我觉得这是无用的,让程序更长的时间来完成它。
那么,我是不是遗漏了一些东西来连接它们,或者在我的绑定中缺少一些逻辑?我真的不知道..。谢谢你的回答。
下面是所要求的更新,很抱歉延迟了响应:声明列表的代码如下
private ObservableCollection<Hostel> _list;
public ObservableCollection<Hostel> List
{
get { return _list; }
set
{
_list = value;
NotifyPropertyChanged("List");
}
}因此,这是旅舍类的可观察到的集合--宿舍类的代码只是简单的模型,具有诸如姓名、电话、电子邮件等属性.
然后是预订类,它有一些属性,比如名字(但现在是预订旅社的人),hostelName --这是我们想预订的旅社的名字,还有很多其他的.我已经将堆栈面板的上下文设置为ViewModel --还有这个ObservableCollection定义(上面)以及NewReservation thingy.因此,当我需要将项目源绑定到ObservableCollection列表,然后将选定的项绑定到NewReservation.hostelName,Mode=TwoWay时,它应该将数据发送到NewReservation,不是吗?或者我应该做一些类似于子步骤的东西--也许是先绑定到像SelectedHostelName那样的东西,然后发送给NewReservation.hostelName?
发布于 2014-11-30 05:04:52
我认为您的List集合是问题所在。你能给我列表对象的定义吗?是招待所名称的收集,还是招待所的集合?
在您的场景中需要做的一件事是,列表应该是一个类型字符串的集合。也就是说,您的ItemSource of ListView应该有一个"string“类型名称的集合。当您选择其中之一时,它将返回指定给NewReservation.hostelName的所选名称。
https://stackoverflow.com/questions/27203156
复制相似问题