Пишу академическое приложение на WPF, в котором есть две формы: основная, в которой находится DataGrid и форма для добавления/редактирования записи на которой находится кнопка "Да" и "Нет".
В форме, при добавлении заметки, текст отсутствует. Соответственно мне нужно заполнить поля и нажать клавишу "Да", после чего данные запишутся. При редактировании я вывожу текст выделенной строки DataGrid в поля формы.
Но вот при нажатии кнопки "Да" никак не могу правильно сделать проверку. При редактировании вместо замены добавляет новую позицию.
Часть XAML:
<TabItem x:Name="notesTab">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Margin="3">Заметки</TextBlock>
</StackPanel>
</TabItem.Header>
<TabItem.Content>
<DataGrid Grid.Column="0" x:Name="ListOfNotes" AlternatingRowBackground ="LightGreen" RowBackground ="Green"
Background="White" Margin="0,20,20,0" Loaded="grid_Loaded" IsReadOnly="True"
BorderBrush="Black" Foreground="Black" OpacityMask="Black"
SelectionChanged="ListOfNotes_SelectionChanged" LoadingRow="ListOfNotes_LoadingRow"
SelectionMode="Single" SelectionUnit="FullRow">
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="Добавить" Click="addNote_Click"></MenuItem>
<MenuItem Header="Редактировать" Click="EditMenuItem_Click"></MenuItem>
<MenuItem Command="Copy" Header="Копировать"></MenuItem>
<MenuItem Header="Удалить" Click="MenuItem_Click"></MenuItem>
<MenuItem Header="Удалить все" Click="DeleteAllMenuItem_Click"></MenuItem>
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Effect>
<BlurEffect Radius="10" x:Name="blur"/>
</DataGrid.Effect>
<DataGrid.Triggers>
<EventTrigger RoutedEvent="UIElement.MouseEnter">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation To="0" Duration="0:0:0.3" Storyboard.TargetName="blur" Storyboard.TargetProperty="Radius"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="UIElement.MouseLeave">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation To="10" Duration="0:0:0.5" Storyboard.TargetName="blur" Storyboard.TargetProperty="Radius"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</DataGrid.Triggers>
</DataGrid>
</TabItem.Content>
</TabItem>
</TabControl>
</StackPanel>
Код обработчика входа в редактирование главного экрана (header и content текстовые поля формы):
int selectedColumn = 0;
bool selectTrue = false;
private void ListOfNotes_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
selectedColumn = ListOfNotes.CurrentCell.Column.DisplayIndex;
selectTrue = true;
}
private void EditMenuItem_Click(object sender, RoutedEventArgs e)
{
if (selectTrue)
{
NotesWindow notesWindow = new NotesWindow();
var selectedCell = ListOfNotes.SelectedCells[selectedColumn];
var cellContent = selectedCell.Column.GetCellContent(selectedCell.Item);
NotesData notesData = new NotesData();
for (int i = 0; i < Constants.DATAGRID_SIZE; i++)
{
selectedCell = ListOfNotes.SelectedCells[i];
cellContent = selectedCell.Column.GetCellContent(selectedCell.Item);
switch (i)
{
case 0: notesData.Id = Guid.Parse((cellContent as TextBlock).Text);
test = notesData.Id;
break;
case 1:
notesWindow.header.Text = (cellContent as TextBlock).Text;
break;
case 2:
notesWindow.content.AppendText((cellContent as TextBlock).Text);
break;
}
}
notesWindow.Show();
}
else
ShowError(UserNotifications.NO_ENTRY_SELECTED);
}
Код в форме для заполнения/редактирования.`
private void confirm_Click(object sender, RoutedEventArgs e)
{
try
{
if (notesData.Id == Guid.Empty)
{
if (string.IsNullOrWhiteSpace(header.Text) && string.IsNullOrWhiteSpace(GetStringFromRtb(content)))
{
ShowError(UserNotifications.FILL_ALL_FIELDS);
}
else
{
notesData.Id = Guid.NewGuid();
notesData.Header = header.Text;
notesData.Content = GetStringFromRtb(content);
factory.CreateNotesFactory().Add(notesData);
this.Close();
}
}
if (notesData.Id == MainWindow.test)
{
//notesData.Id = Guid.Parse("689f5ab7-f779-4df3-bece-1aaaa64f8ddf"); // Проверка;
notesData.Id = MainWindow.test;
notesData.Header = header.Text;
notesData.Content = GetStringFromRtb(content);
factory.CreateNotesFactory().Edit(notesData);
this.Close();
}
}
catch (Exception err)
{
ShowError(err, UserNotifications.ERROR);
}
}
В общем сделал я просто пока проверку. Что бы работало. Буду дальше переписывать применив MVVM.
private void confirm_Click(object sender, RoutedEventArgs e)
{
try
{
if (string.IsNullOrWhiteSpace(header.Text) && string.IsNullOrWhiteSpace(GetStringFromRtb(content)))
{
ShowError(UserNotifications.FILL_ALL_FIELDS);
}
if (MainWindow.test == Guid.Empty)
{
notesData.Id = Guid.NewGuid();
notesData.Header = header.Text;
notesData.Content = GetStringFromRtb(content);
factory.CreateNotesFactory().Add(notesData);
this.Close();
}
else
{
//notesData.Id = Guid.Parse("689f5ab7-f779-4df3-bece-1aaaa64f8ddf"); // Проверка;
notesData.Id = MainWindow.test;
notesData.Header = header.Text;
notesData.Content = GetStringFromRtb(content);
factory.CreateNotesFactory().Edit(notesData);
this.Close();
}
}
Так вроде работает.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Начинаю работать с Xamarin StudioХочу написать маленькое приложение для работы с сокетами
Можно ли один использовать такой подход в каждом методе?
При срабатывании свойства Form1_FormClosing текст из RichTextBox должен сохраниться в формате rtf в папку с проектомКак это сделать?
У меня возникла проблема, нужно обнулить переменную когда она превысит длину массива