以静态方法访问列表框

时间:2013-10-16 09:54:14

标签: c# windows-8 static listbox windows-store-apps

我有一个静态方法,当我需要在listbox中更新数据时,我从另一个类调用它。但后来我需要滚动列表框到最后一项。这是代码:

 public static void updateMessages()
  {
      MyDatasCurentUser.Clear();//clear messages from previewous user from datas
      foreach (var items in UniDB.returnlistOfMessagesData(IdOfChoosenUser, MainContentPage.myID))
      {
          _mydataCurentUser.Add(new BindingData
          {
              MessengerReadTime = new DateTime(items.readTime.Year, items.readTime.Month, items.readTime.Day, items.readTime.Hour, items.readTime.Minute, 0),
              MessengeFullName = items.senderName,
              MessengerTime = new DateTime(items.sendTime.Year, items.sendTime.Month, items.sendTime.Day, items.sendTime.Hour, items.sendTime.Minute, 0).ToString("dd.MM.yyyy - HH:mm"),
              MessengerMessage = items.message,
              MessengerIsFromMe = items.isFromMe,
          });
      }

      lbChoosenMessagesUsers.ScrollIntoView(lbChoosenMessagesUsers.Items.Last());
  }

但是我收到错误无法访问静态上下文中的非静态字段lbChoosenMessagesUsers.ScrollIntoView(lbChoosenMessagesUsers.Items.Last());

当方法updateMessages()被调用时,有什么方法可以做到这一点lbChoosenMessagesUsers.ScrollIntoView(lbChoosenMessagesUsers.Items.Last());

1 个答案:

答案 0 :(得分:1)

如果你有一个类的非静态方法:

class Form1
{
   public void UpdateMessages()
   {   
       // ...
       lbChoosenMessagesUsers.ScrollIntoView(lbChoosenMessagesUsers.Items.Last());
   }
}

并且您想要从不同类的对象调用它,该对象将需要对第一个对象的引用。一个常见的解决方案是将对第一个对象的引用传递给第二个对象的构造函数:

class OtherClass
{  
   Form1 _form;
   OtherClass(Form1 form)
   {
       _form = form;
   }

   void Method()
   {
       //can access the methods of the other object
       _form.UpdateMessages();
   }
}

或者您可以稍后传递该对象:

class OtherClass
{  
   public void Method(Form1 form)
   {
       form.UpdateMessages();
   }
}