C-Sharp WPF MVVM ListView mit TextBox SelectionChanged Event
Hallo @ All,
Wieder mal ein Problem mit ListView. Ich komme einfach nicht weiter und hoffe mir kann jemand etwas Starthilfe geben
Folgende Stellung:
Ich habe eine ListView mit 4 Spalten. 2 Spalten enthalten je eine TextBox die befüllt werden sollen (siehe Bild)
Grundsätzlich funktioniert das SelectionChanged Event der ListView, wähle ich aber eine TextBox aus, wird ein Remove ausgeführt (SelectionChangedEventArgs e.RemovedItems) und das ListViewItem ist anschließend leer bzw. nicht mehr ausgewählt.
Habe versucht das mit Mouse-Koordinaten abzufangen...
...leider absolut sinnlos, weil das Event ja schon gezündet hat.
Meine Frage dazu:
Wie kann ich verhindern, dass beim Auswählen und befüllen einer der TextBoxen das SelectionChanged Event zündet oder dies rückgängig machen?
Diese und ähnliche Beispiele die ich so im INet gefunden habe, habe ich schon versucht:
http://stackoverflow.com/questions/2608071/wpf-cancel-a-user-selection- ...
http://stackoverflow.com/questions/29993894/listview-selectionchanged-w ...
das XAML sieht folgendermaßen aus (Snipped):
Die Methode dazu:
Hoffe auf mir kann jemand helfen *liebschau*
Grüße!
Mayho
Wieder mal ein Problem mit ListView. Ich komme einfach nicht weiter und hoffe mir kann jemand etwas Starthilfe geben
Folgende Stellung:
Ich habe eine ListView mit 4 Spalten. 2 Spalten enthalten je eine TextBox die befüllt werden sollen (siehe Bild)
Grundsätzlich funktioniert das SelectionChanged Event der ListView, wähle ich aber eine TextBox aus, wird ein Remove ausgeführt (SelectionChangedEventArgs e.RemovedItems) und das ListViewItem ist anschließend leer bzw. nicht mehr ausgewählt.
Habe versucht das mit Mouse-Koordinaten abzufangen...
Point currentMouseOnGridPosition = Mouse.GetPosition(null);
double col1 = (_ListView.View as GridView).Columns[2].Width + 20;
double col2 = (_ListView.View as GridView).Columns[3].Width + 20;
if (currentMouseOnGridPosition.X < /* auch > versucht usw */ (col1 + col2))
{
// viele Viele Versuche
}
...leider absolut sinnlos, weil das Event ja schon gezündet hat.
Meine Frage dazu:
Wie kann ich verhindern, dass beim Auswählen und befüllen einer der TextBoxen das SelectionChanged Event zündet oder dies rückgängig machen?
Diese und ähnliche Beispiele die ich so im INet gefunden habe, habe ich schon versucht:
http://stackoverflow.com/questions/2608071/wpf-cancel-a-user-selection- ...
http://stackoverflow.com/questions/29993894/listview-selectionchanged-w ...
das XAML sieht folgendermaßen aus (Snipped):
<ListView
x:Name="_ListView"
Grid.Row="9"
Grid.ColumnSpan="4"
x:FieldModifier="public"
AllowDrop="True"
AutomationProperties.IsColumnHeader="True"
ItemsSource="{Binding Path=List_All}"
KeyboardNavigation.TabNavigation="Continue"
SelectionChanged="_ListView_SelectionChanged"
SelectionMode="Multiple">
<ListView.View>
<GridView>
<GridViewColumn
Width="80"
DisplayMemberBinding="{Binding SectionName}"
HeaderContainerStyle="{StaticResource GridViewHeaderAllignment}">
<GridViewColumn.Header>
<TextBlock Text=" Section" />
</GridViewColumn.Header>
</GridViewColumn>
<GridViewColumn
Width="auto"
DisplayMemberBinding="{Binding ProgramName}"
HeaderContainerStyle="{StaticResource GridViewHeaderAllignment}">
<GridViewColumn.Header>
<TextBlock Text=" Programm-Name" />
</GridViewColumn.Header>
</GridViewColumn>
<GridViewColumn Width="200" HeaderContainerStyle="{StaticResource GridViewHeaderAllignment}">
<GridViewColumn.Header>
<TextBlock Text=" Registry-Key" />
</GridViewColumn.Header>
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox
Width="150"
HorizontalAlignment="Center"
IsEnabled="{Binding Path=SearchedRegKey_IsEnabled}"
Text="{Binding Path=SearchedRegKey, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="200" HeaderContainerStyle="{StaticResource GridViewHeaderAllignment}">
<GridViewColumn.Header>
<TextBlock Text=" Display-Name" />
</GridViewColumn.Header>
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox
Width="150"
HorizontalAlignment="Center"
IsEnabled="{Binding Path=SearchedDisplayName_IsEnabled}"
Text="{Binding Path=SearchedDisplayName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
Die Methode dazu:
private void _ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
foreach (ListView_Uninstall_Model item in e.AddedItems)
{
item.SearchedDisplayName_IsEnabled = true;
item.SearchedRegKey_IsEnabled = true;
item.SelectedAsStart = true;
}
foreach (ListView_Uninstall_Model item in e.RemovedItems)
{
item.SearchedDisplayName = string.Empty;
item.SearchedRegKey_IsEnabled = false;
item.SearchedRegKey = string.Empty;
item.SelectedAsStart = false;
}
}
Hoffe auf mir kann jemand helfen *liebschau*
Grüße!
Mayho
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 336313
Url: https://administrator.de/forum/c-sharp-wpf-mvvm-listview-mit-textbox-selectionchanged-event-336313.html
Ausgedruckt am: 13.04.2025 um 01:04 Uhr
2 Kommentare
Neuester Kommentar
Moin,
mal die generelle Frage warum versuchst du das alles über ein Listview umzusetzen?
Wieso kein Datagridview(DGV)? Denn was du da versuchst darzustellen schaut sehr danach aus.
Objekt was den Inhalt enthält zusammenbauen, an das DGV(die 2 Spalten editierbar einstellen) binden und fertig.
Danach arbeitest du nur noch mit dem Objekt und überlässt dem DGV alles was mit Darstellung zu tun hat.
Der Profi(Colinardo) hier im Bereich ist da fitter im C# als ich.
VG
mal die generelle Frage warum versuchst du das alles über ein Listview umzusetzen?
Wieso kein Datagridview(DGV)? Denn was du da versuchst darzustellen schaut sehr danach aus.
Objekt was den Inhalt enthält zusammenbauen, an das DGV(die 2 Spalten editierbar einstellen) binden und fertig.
Danach arbeitest du nur noch mit dem Objekt und überlässt dem DGV alles was mit Darstellung zu tun hat.
Der Profi(Colinardo) hier im Bereich ist da fitter im C# als ich.
VG