Два разных действия одной кнопкой. WPF C#

509
25 июня 2017, 13:39

Пишу академическое приложение на 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);
        }
    }
Answer 1

В общем сделал я просто пока проверку. Что бы работало. Буду дальше переписывать применив 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();
            }

        }

Так вроде работает.

READ ALSO
Разработка приложения на сокетах в Xamarin Studio

Разработка приложения на сокетах в Xamarin Studio

Начинаю работать с Xamarin StudioХочу написать маленькое приложение для работы с сокетами

282
Использование булева из структуры [требует правки]

Использование булева из структуры [требует правки]

Можно ли один использовать такой подход в каждом методе?

284
Сохранить текст из RichTextBox в файл

Сохранить текст из RichTextBox в файл

При срабатывании свойства Form1_FormClosing текст из RichTextBox должен сохраниться в формате rtf в папку с проектомКак это сделать?

401
Как обнулить переменную?

Как обнулить переменную?

У меня возникла проблема, нужно обнулить переменную когда она превысит длину массива

444