这是我的班级:
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;
}
我创建了这个类的一些实例,并将它们存储在listview中。 当我双击listViewItem(它只显示name属性)时,我导航到另一个需要知道discussionId的页面。
我怎样才能获得这个属性? 这就是我导航到新页面的方式:
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:
不连贯的可访问性:参数类型&#39; commApp.Classes.Discussion&#39;比方法&commief.MessagePage.MessagePage(commApp.Classes.Discussion)&#39;
更难访问
答案 0 :(得分:0)
如果没有a good, minimal, complete code example,就无法确定最佳方法是什么。
但是,如果您已正确设置ListView
并且ItemsSource
是Discussion
个对象的集合,则默认情况下SelectedValue
属性将返回{{ 1}}对象实例引用,对应于列表中的选定项。
在这种情况下,您只需将代码更改为:
Discussion
即。只需使用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.SelectedValue;
this.NavigationService.Navigate(new MessagePage(selectedDiscussion));
break;
}
clickedObj = VisualTreeHelper.GetParent(clickedObj);
}
}
属性而不是SelectedValue
。如果您通过设置SelectedItem
属性偏离了默认值,那么您将需要使用SelectedValuePath
对象来获取正确的引用:
ItemContainerGenerator
如果这些似乎都不适用于您的情况,请编辑您的问题,以便它包含一个很好的代码示例,以便提供更好的答案。