您可以將文本框只讀默認情況下,當用戶進入edit
或create new
狀態只啓用他們。
順便說一句,你不應該實現CRUD接口時,DataGrid
支持了。
編輯:代碼,以幫助您直觀
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
}
當你說: 「編輯」 或 「新建」 狀態,是從的DbContext? –
不是的。它應該是一個枚舉,你從視圖模型中公開屬性。 – Xiaoy312
我已經添加了一些代碼來幫助您可視化。 – Xiaoy312