Вы можете привести «ListBoxItem» (тип объекта) к классу, которым он действительно является.
Вот небольшой пример того, как добавлять, читать и изменять элементы в вашем ListBox
:
// Example class
public class RineItem
{
public string Name { get; set; }
public int Id { get; set; }
// Override ToString() for correct displaying in listbox
public override string ToString()
{
return "Name: " + this.Name;
}
}
public MainWindow()
{
InitializeComponent();
// Adding some examples to our empty box
this.ListBox1.Items.Add(new RineItem() { Name = "a", Id = 1 });
this.ListBox1.Items.Add(new RineItem() { Name = "b", Id = 2 });
this.ListBox1.Items.Add(new RineItem() { Name = "c", Id = 3 });
}
private void Button_Click(object sender, RoutedEventArgs e)
{
// Loop through SelectedItems
foreach (var item in this.ListBox1.SelectedItems)
{
// Have a look at it's type. It is our class!
Console.WriteLine("Type: " + item.GetType());
// We cast to the desired type
RineItem ri = item as RineItem;
// And we got our instance in our type and are able to work with it.
Console.WriteLine("RineItem: " + ri.Name + ", " + ri.Id);
// Let's modify it a little
ri.Name += ri.Name;
// Don't forget to Refresh the items, to see the new values on screen
this.ListBox1.Items.Refresh();
}
}
Сообщение об ошибке, с которым вы сталкиваетесь, говорит вам, что не существует неявного приведения для преобразования object
в и RineItem.
Возможны неявные приведения (от int до long). И вы можете создавать свои собственные. Вот пример:
public class RineItem2
{
public string Name2 { get; set; }
public int Id2 { get; set; }
public static implicit operator RineItem(RineItem2 o)
{
return new RineItem() { Id = o.Id2, Name = o.Name2 };
}
}
Теперь вы можете сделать это:
RineItem2 r2 = new RineItem2();
RineItem r = r2;
Но это следует использовать, только если каждый объект из класса RineItem2
может быть приведен к RineItem
.
Приведение с object
на RineItem
должно работать каждый раз! Следовательно, вы не знаете, к какому типу относится ваш объект, к которому вы не имеете права:
object o = "bla bla";
RineItem r = (RineItem)o; // Not allowed! Will not work!