ich tue mir gerade schwer beim richtigen Einbinden eines Enum in eine ListView mittels MVVM. Die ListView wird vom ObservableCollection<Plugin> befüllt. Nach dem Start wird das Enum gelesen und richtig angezeigt, sowohl als Text als auch als Image via Converter.
Beim Laden und Entladen eines Plugins wird der Wert des Enum-Propertys (State) verändert. Die Veränderung wird aber nicht von der ListView registiert, aber sehr wohl von den Buttons, die jenach Value des Enums aktiviert und deaktiviert werden.
Auf dem Screenshot im Anhang sieht man es deutlicher, als ich es beschreiben kann. Das Plugin wird beim Start geladen und sowohl das Icon als auch der State sind richtig. Nachdem ich das Plugin entladen habe, reagierten die Buttons, aber nicht die ListView.
Google hilft mir leider nicht weiter, denn obwohl ich nach ListView suche, sind die meisten Treffer über Comboboxen.
Wie macht man das richtig?
XAML:
<Window x:Class="TestApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:TestApp"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="150" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid
Grid.Column="0" Grid.Row="0"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Margin="0, 5, 0, 0">
<ListView
Name="PluginListView"
HorizontalAlignment="Stretch"
VerticalAlignment="Top"
ItemsSource="{Binding PluginList}"
SelectedItem="{Binding SelectedPlugin}"
SelectionMode="Single"
SizeChanged="PluginListView_OnSizeChanged" Loaded="PluginListView_OnLoaded">
<ListView.View>
<GridView>
<GridViewColumn Width="32">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image Tag="{Binding State}" Width="16" Height="16" Margin="0">
<Image.Style>
<Style TargetType="Image">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Tag, RelativeSource={RelativeSource Self}}" Value="Loaded">
<Setter Property="Source" Value="/Resources/green_icon.png"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=Tag, RelativeSource={RelativeSource Self}}" Value="Unloaded">
<Setter Property="Source" Value="/Resources/red_icon.png"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Path" DisplayMemberBinding="{Binding ProjectPath}" Width="Auto" />
<GridViewColumn Header="State" DisplayMemberBinding="{Binding State}" Width="80"/>
<GridViewColumn Header="Auto Load" Width="80">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox
IsChecked="{Binding Path=AutoLoad, Mode=TwoWay}"
HorizontalAlignment="Center"
Checked="OnCheckboxCheckChange"
Unchecked="OnCheckboxCheckChange"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Auto Reload" Width="80">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox
IsChecked="{Binding Path=AutoReload, Mode=TwoWay}"
HorizontalAlignment="Center"
Checked="OnCheckboxCheckChange"
Unchecked="OnCheckboxCheckChange"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
<TextBox
Text="{Binding GConsoleText}"
Name="GConsole"
VerticalAlignment="Bottom"
MinHeight="100"/>
</Grid>
<StackPanel Grid.Column="1">
<StackPanel Orientation="Horizontal" Margin="5">
<Button
Content="Add"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Padding="3"
Command="{Binding AddCommand}" />
<Button
Content="Remove"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Margin="10, 0, 0, 0"
Padding="3"
Command="{Binding RemoveCommand}" CommandParameter="Remove"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="5">
<Button
Content="Load"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Padding="3"
Command="{Binding LoadCommand}" CommandParameter="Load"/>
<Button
Content="Unload"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Margin="10, 0, 0, 0"
Padding="3"
Command="{Binding UnloadCommand}" CommandParameter="Unload"/>
</StackPanel>
</StackPanel>
</Grid>
</Grid>
</Window>
(Kann leider nicht mehr Code einfügen, da ich 8k Zeichen aufgebraucht sind.)