【发布时间】:2015-07-07 22:12:58
【问题描述】:
这是我的课:
class Discussion
{
public String name {get; set;}
public String discussionId { get; set; }
public List<Message> liste {get; set;}
public Discussion(String name, String discussionId)
{
this.name = name;
this.discussionId = discussionId;
}
我创建了这个类的一些实例并将它们存储在一个列表视图中。 当我双击 listViewItem(它只显示 name 属性)时,我导航到需要知道讨论 ID 的另一个页面。
我怎样才能得到这个属性? 这就是我导航到新页面的方式:
public partial class DiscussionPage : Page
{
public DiscussionPage()
{
InitializeComponent();
try
{
SqlDataReader read = Broker.sqlcommand("SELECT DISCUSSION.TITRE, USER1.NOM FROM dbo.DISCUSSION, dbo.USER1 WHERE USER1.ID = DISCUSSION.ID_CREER;").ExecuteReader();
while (read.Read())
{
Discussion d = new Discussion(read["TITRE"].ToString(), read["NOM"].ToString());
listDiscussion.Items.Add(d);
}
}
catch (Exception)
{
throw;
}
}
private void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
DependencyObject clickedObj = (DependencyObject)e.OriginalSource;
while (clickedObj != null && clickedObj != listDiscussion)
{
if (clickedObj.GetType() == typeof(ListViewItem))
{
Discussion selectedDiscussion = (Discussion)listDiscussion.SelectedItem;
this.NavigationService.Navigate(new MessagePage(selectedDiscussion));
break;
}
clickedObj = VisualTreeHelper.GetParent(clickedObj);
}
}
private void openAddDiscussion(object sender, RoutedEventArgs e)
{
addDiscussion add = new addDiscussion();
add.Show();
}
}
我需要知道 DiscussionId 才能加载此页面的内容:
public partial class MessagePage : Page
{
public MessagePage(Discussion SelectedDiscussion)
{
InitializeComponent();
try
{
SqlDataReader read = Broker.sqlcommand("SELECT MESSAGE.TEXT FROM dbo.MESSAGE WHERE MESSAGE.ID_POSSEDER = \'" + SelectedDiscussion.discussionId + "\'").ExecuteReader();
while (read.Read())
{
Message m = new Message(read["TEXT"].ToString());
showMessage.Items.Add(m);
}
}
catch (Exception)
{
throw;
}
}
}
已添加完整代码,但仍不适用于 SelectedValue:
不连贯的可访问性:参数类型“commApp.Classes.Discussion”比方法“commApp.MessagePage.MessagePage (commApp.Classes.Discussion)”更难访问
【问题讨论】:
-
您尚未展示如何将项目添加到 ListView,但您应该添加 Discussion 对象,而不是 ListViewItems。执行此操作的常用方法是创建一个视图模型类,该类公开
ObservableCollection<Discussion>类型的属性并将ListView 的ItemsSource属性绑定到该集合。详细解释见Data Templating Overview。
标签: c# wpf parameter-passing listviewitem