我对编程很安静,目前正在学习C#和MVVMC模式(我认为它与MVVM模式基本相同)。
我需要为ChiliPlants大学编写数据库工具。在那里,您应该能够从ObservableCollection中编辑现有项目。
我在DataGrid中显示的ObservableCollection,请参阅:DataGrid 在DataGrid下面有三个按钮:添加,编辑和删除。 我能够编程AddButton,以及DeleteButton。
不幸的是我不知道如何编程EditButton。 它应该打开一个新窗口,其中应该像这样打开SelectedItem:EditWindow
到目前为止,我的EditButton与我的AddButton完全相同。
请在此处查看我的代码:
查看:
<StackPanel Grid.Row="1" Orientation="Horizontal">
<Button Content="Add" Margin="5,5,0,5" Width="100" Command="{Binding AddCommand}" />
<Button Content="Edit" Margin="5,5,0,5" Width="100" Command="{Binding EditCommand}" />
<Button Content="Delete" Margin="5,5,540,5" Width="100" Command="{Binding DeleteCommand}" />
<Button Content="Sichern" Margin="5,5,5,5" Width="100" Command="{Binding SaveCommand}" />
</StackPanel>
视图模型:
private ICommand _editCommand;
public ICommand EditCommand
{
get { return _editCommand; }
set { _editCommand = value; }
}
控制器:
public void SDInitialize()
{
var view = new WindowStammdatenverwaltung();
mViewModel = new WindowStammdatenverwaltungViewModel
{
EditCommand = new RelayCommand(EditCommandExecute, EditCommandCanExecute)
};
view.DataContext = mViewModel;
view.ShowDialog();
}
private void EditCommandExecute(object obj)
{
var editedObject = new WindowEditController().EditChiliModel();
if (editedObject != null)
{
mViewModel.Stock.Add(mViewModel.SelectedChili);
}
}
private bool EditCommandCanExecute(object obj)
{
return mViewModel.SelectedChili != null;
}
问题出在EditCommandExecute上。目前我刚刚在那里放了一个AddCommandExecute代码。遗憾的是,我不知道如何编写这样的EditCommandExecute。
我的WindowEditController看起来像这样:
public class WindowEditController
{
WindowEdit mView;
public ChiliModel EditChiliModel()
{
mView = new WindowEdit();
WindowEditViewModel mViewModel = new WindowEditViewModel
{
ChiliModel = new ChiliModel(),
OkCommand = new RelayCommand(ExecuteOkCommand),
CancelCommand = new RelayCommand(ExecuteCancelCommand),
};
mView.DataContext = mViewModel;
if (mView.ShowDialog() == true)
{
return mViewModel.ChiliModel;
}
else
{
return null;
}
}
private void ExecuteOkCommand(object obj)
{
mView.DialogResult = true;
mView.Close();
}
private void ExecuteCancelCommand(object obj)
{
mView.DialogResult = false;
mView.Close();
}
我知道,我可以让用户在DataGrid中编辑SelectedItem,但我的任务中不允许这样做...
我可以使用与AddCommand相同的窗口吗?基本上它们应该看起来一样,EditWindow应该已经包含了SelectedItem的信息。
我几乎查找了与此主题相似的每个条目,但我找不到简单的解决方案。或者我能用我糟糕的编码技巧理解的解决方案:( ...
如果你们能帮助我,我会很高兴的。请保持这个新手的简单:)我已尝试过的内容:
我尝试向我的Button添加一个CommandParameter,如下所示:CommandParameter="{Binding SelectedItem, ElementName=StockDataGrid}"
但是这仍然没有打开包含SelectedItem数据的窗口。它刚刚为新物品打开了一个全新的窗口。
答案 0 :(得分:2)
在Command属性后面使用CommandParameter
,然后将其绑定到SelectedItem
的{{1}}。
例如,假设您DataGrid
具有属性DataGrid
。
Name=MyDataGrid
变为:
Button
执行<Button Content="Edit"
Margin="5,5,0,5"
Width="100"
Command="{Binding EditCommand}"
CommandParameter="{Binding SelectedItem, ElementName=MyDataGrid}"/>
后,EditCommandExecute(object obj)
实际上是您想要的当前obj
。