gpt4 book ai didi

c# - WPF 如何使列表框项目可编辑?

转载 作者:太空宇宙 更新时间:2023-11-03 23:36:08 27 4
gpt4 key购买 nike

我需要将“编辑所选项目”功能添加到我的列表框中。基本上我需要两个之一:

  • Ctrl+单击列表项,它会神奇地变成一个可编辑的文本框或其他东西,并且在编辑时更新数据库中的数据。

  • 按下我的列表框下的“编辑”按钮,打开新的编辑窗口,在那里编辑数据,更新数据库,并在编辑窗口关闭时更新列表框。

我遇到的问题:

  • 我想要解决方案的第一个变体,但我真的不知道如何实现它。

  • 实现第二个变体 我不知道在新窗口中编辑所选项目后应该如何更新列表框。

这是我的 ListBox XAML:

<Grid>
<ListBox x:Name="LstQueries" HorizontalAlignment="Left" Height="228" VerticalAlignment="Top" Width="482" FontFamily="HelveticaNeueCyr" FontSize="16" ItemsSource="{Binding Queries}" MouseDoubleClick="LstQueries_MouseDoubleClick">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<Label Content="{Binding Name}" FontWeight="Medium" FontSize="18" FontFamily="Helvetica"/>
<TextBlock Text="{Binding Text}" FontSize="16" FontFamily="Helvetica"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button x:Name="BtnEdit" Content="Edit" HorizontalAlignment="Left" Margin="0,228,0,0" VerticalAlignment="Top" Width="482" Height="43" Click="BtnEdit_Click"/>
</Grid>

这就是我的编辑窗口 XAML 的样子:

<Grid>
<TextBox x:Name="TxtName" HorizontalAlignment="Left" Height="23" Margin="99,13,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="183" FontFamily="HelveticaNeueCyr" FontSize="16"/>
<Label Content="Name:" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" FontFamily="HelveticaNeueCyr" FontSize="16"/>
<TextBox x:Name="TxtText" HorizontalAlignment="Left" Height="116" Margin="65,45,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="217" FontFamily="HelveticaNeueCyr" FontSize="16"/>
<Label Content="Text:" HorizontalAlignment="Left" Margin="10,86,0,0" VerticalAlignment="Top" FontFamily="HelveticaNeueCyr" FontSize="16" Height="27" Width="50"/>
<Button x:Name="BtnSave" Content="Save" HorizontalAlignment="Left" Margin="10,166,0,0" VerticalAlignment="Top" Width="132" Height="33"/>
<Button x:Name="BtnCancel" Content="Cancel" HorizontalAlignment="Left" Margin="150,166,0,0" VerticalAlignment="Top" Width="132" Height="33" Click="BtnCancel_Click"/>
</Grid>

下面是我如何访问 ListBox 中的 SelectedItem:

if (LstQueries.SelectedIndex < 0) return;
dynamic item = LstQueries.SelectedItem as dynamic;
string name = item.Name;
string text = item.Text;

绑定(bind)到列表框的“查询”是 ObservableCollection<Query>其中 Query看起来像这样:

public class Query
{
public string Id { get; set; }
public string Name { get; set; }
public string Text { get; set; }
public string Autoschool { get; set; }
}

那么,你能帮我实现其中一个解决方案吗?

最佳答案

您可以用不同的方式解决这个问题。在我曾经写过的一个项目中,我想双击一个项目打开该项目的编辑窗口。我选择使用 i.Interaction.Triggers 。具体代码如下:

<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<Command:EventToCommand Command="{Binding EditExercise_Command}"
CommandParameter="{Binding ElementName=LastExercises_ListView
,Path=SelectedItem}" />
</i:EventTrigger>
</i:Interaction.Triggers>

现在,每当我双击一个项目时,它都会打开一个窗口来编辑它。这是使用 MVVM,所以我不想在我的代码后面有代码。

您必须引用此 dll:system.windows.interactivity.dll,并且您可能需要阅读一些有关它们的用法的信息。这是 an article about that .

这是完整的列表框代码(至少是相关位):

   <ListBox x:Name="..."  
ItemsSource="{Binding FilteredCollection}"
SelectedItem="{Binding SelectedExercise, UpdateSourceTrigger=PropertyChanged}"
...
>
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header ="Edit Exercise"
Command="{Binding EditExercise_Command}"
CommandParameter="{Binding SelectedExercise}"
/>
<MenuItem Header ="Delete Exercise"
Command="{Binding DeleteExercise_Command}"
CommandParameter="{Binding SelectedExercise}"
/>
</ContextMenu>
</ListBox.ContextMenu>

<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<Command:EventToCommand Command="{Binding EditExercise_Command}"
CommandParameter="{Binding ElementName=LastExercises_ListView
, Path=SelectedItem}"
/>
</i:EventTrigger>
</i:Interaction.Triggers>

</ListBox>

如果您不想双击,或者如果您想删除该项目(使用不同的命令),您还可以获得额外的右键单击菜单选项

关于c# - WPF 如何使列表框项目可编辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30556903/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com