ich schreibe gerade an einer anwendung, mit der man minecraft-server (bukkit) verwalten kann. dabei soll es auch die installierten plugins auflisten. das hab ich auch mit einer listview/listbox (seh kein unterschied zwischen den beiden) gemacht, die die items aus einer bindung kriegt. doch wenn er jetzt items hinzufügen soll, bekomme ich diese meldung:
Zitat
Eine nicht behandelte Ausnahme des Typs "System.StackOverflowException" ist in WindowsBase.dll aufgetreten.
und im ausgabe fenster ist auch nichts auffälliges zu sehen.
der xaml-code:
<ListBox x:Name="Plugins" ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True" ItemTemplate="{StaticResource PluginItem}" Background="Transparent" BorderThickness="0"/>
...und hier die vorlage der items:
<DataTemplate x:Key="PluginItem"> <Grid MinHeight="32"> <Grid.ColumnDefinitions> <ColumnDefinition Width="32"/> <ColumnDefinition Width="*"/> <ColumnDefinition Width="20"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="2"/> <RowDefinition Height="32"/> <RowDefinition Height="2"/> </Grid.RowDefinitions> <Image Name="plugIcon" Tag="{Binding Path=PluginStatus}" Grid.Column="0" Grid.Row="1"> <Image.Resources> <Style TargetType="Image"> <Style.Triggers> <Trigger Property="Tag" Value="Working"> <Setter Property="Source" Value="Resources/Working.png"/> </Trigger> <Trigger Property="Tag" Value="Disabled"> <Setter Property="Source" Value="Resources/Disabled.png"/> </Trigger> <Trigger Property="Tag" Value="Faulty"> <Setter Property="Source" Value="Resources/Faulty.png"/> </Trigger> </Style.Triggers> </Style> </Image.Resources> </Image> <ContentPresenter ContentSource="{Binding Path=PluginName}" Grid.Column="1" Grid.Row="1" VerticalAlignment="Center" Margin="2" HorizontalAlignment="Left"/> <Button/> </Grid> </DataTemplate>
der code dahinter:
Dim wPlugins As New List(Of PlugItem) If IO.Directory.Exists("plugins") Then Dim workingPlugins() As String = IO.Directory.GetFiles("plugins") For Each File As String In workingPlugins If File.EndsWith(".jar") Then wPlugins.Add(New PlugItem() With {.PluginStatus = "Working", .PluginName = File.Replace(".jar", "")}) End If Next End If InitializeComponent() Plugins.ItemsSource = wPlugins
...und hier die klasse für die plugin-items:
Public Class PlugItem Dim plugstate As String Public Property PluginStatus() As String Get Return plugstate End Get Set(ByVal value As String) If value = "Working" Xor value = "Disabled" Xor value = "Faulty" Then plugstate = value Else Throw New Exception("Invalid plugin status given!" & vbNewLine & "You can only set:" & vbNewLine & "'Working', 'Disabled' or 'Faulty'!") End If End Set End Property Dim plugname As String Public Property PluginName() As String Get Return plugname End Get Set(value As String) plugname = value End Set End Property Public Overrides Function ToString() As String Return PluginStatus & "|" & PluginName End Function End Class
zu erwähnen ist auch, dass ich mich nicht wirklich mit datenbindungen so recht auskenne (hab das aus nem blog im inet übernommen). vielleicht hab ich ja etwas übersehn.