【发布时间】:2015-05-31 11:33:10
【问题描述】:
我需要将“编辑所选项目”功能添加到我的列表框中。基本上我需要两个中的任何一个:
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;
绑定到列表框的“查询”是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; }
}
那么,您能帮我实施这两种解决方案吗?
【问题讨论】:
-
所以你有你选择的项目,你有一个编辑按钮,我不太确定是什么问题......菲利普的回答似乎也很公平。
-
@Noctis 好吧,问题是在构造函数或类似的东西的窗口之间来回传递数据将是一个非常丑陋的解决方案,我想了解如何在那个案子。但无论如何,第一个解决方案(神奇的)会更好:)