我正在使用C#,WPF和MVVM开发一个简单的CRUD。我正在使用DataGrid进行导航,Databounded Textboxes,一个“New”按钮用于插入,用户只需更改文本框值即可更改数据,最后点击“保存”按钮。
现在,我可以在单击“新建”按钮后轻松禁用DataGrid,并在单击“保存”按钮后重新启用。
但是,版本怎么样?我想在编辑时禁用DataGrid,但我不知道我是如何在MVVM中执行的。
答案 0 :(得分:1)
默认情况下,您可以将文本框设置为只读,并且仅在用户输入edit
或create new
状态时启用它们。
顺便说一句,当DataGrid
支持CRUD接口时,你不应该实现CRUD接口。
编辑:帮助您可视化的代码
<强> XAML 强>
<__CONTAINER__.Resources>
<Style x:Key="CrudTextBoxStyle"
BasedOn="{StaticResource {x:Type TextBox}}"
TargetType="TextBox">
<Setter Property="IsEnabled" Value="False" />
<Style.Triggers>
<DataTrigger Binding="{Binding EditMode}" Value="CreateNew">
<Setter Property="IsEnabled" Value="True" />
</DataTrigger>
<DataTrigger Binding="{Binding EditMode}" Value="Edit">
<Setter Property="IsEnabled" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
</__CONTAINER__.Resources>
<DataGrid IsReadOnly="True"
ItemsSource="{Binding Records}"
SelectedItem="{Binding CurrentRecord}"
SelectionMode="Single"
SelectionUnit="FullRow" />
<Button Content="Create New" />
<Button Content="Edit" />
<Button Content="Save" />
<Button Content="Cancel" />
<TextBox Style="{StaticResource CrudTextBoxStyle}" Text="{Binding CurrentRecord.TextProperty1}" />
<TextBox Style="{StaticResource CrudTextBoxStyle}" Text="{Binding CurrentRecord.TextProperty2}" />
代码
class CrudViewModel
{
// you should use the full implementation with INPC
public Record CurrentRecord { get; set; }
public IList<Record> Records { get; set; }
public EditMode EditMode { get; set; }
private void CreateNewImpl()
{
CurrentRecord = new Record();
EditMode = EditMode.CreateNew;
}
private void EditImpl()
{
EditMode = EditMode.Edit;
}
private void SaveImpl()
{
if (EditMode == EditMode.CreateNew)
{
Records.Add(CurrentRecord);
}
EditMode = EditMode.View;
}
}
enum EditMode
{
View, CreateNew, Edit
}