Получить значение буфера обмена из статической переменной

Так что продолжение моего последнего поста...

я имею PieChart с Legend и я хочу, чтобы иметь возможность щелкнуть правой кнопкой мыши на Legend название и скопируйте значение. Так что это Legend Mouse Right click Event:

private void pieLegend_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    var hoveredItem = this.pieLegend.Items.FirstOrDefault(x => x.IsHovered);
    Clipboard.SetText(hoveredItem.Title);

}

Как вы можете видеть, я копирую значение Clipboard но я хочу открыть просто Copy меню, поэтому я создаю ContextMenu и у меня есть ContextMenu Click Event:

private void MenuItem_Click(object sender, RoutedEventArgs e)
{

}

Не внутри этого Click Event я хочу получить Clipboard но потому что pieLegend_MouseRightButtonDown event уволен до этого Click Event я хочу найти способ получить это Clipboard значение. Так что я думал о создании Static переменная, которая первая Event установит Clipboard значение и от Click Event просто получите это значение, но мой вопрос в том, является ли это наилучшим / подходящим способом сделать это.

1 ответ

Ну, в этом нет ничего плохого.

Я думаю, что вы над этим думаете, вам действительно нужно учитывать ваши требования.

В этом конкретном сценарии я бы не предложил использовать буфер обмена для передачи данных из двух событий. Зачем? Ну, потому что пользователь может просто скопировать в буфер обмена что-то еще, что может быть совершенно не связано с вашим приложением, поэтому это может быть ошибочным.

Итак, я ожидаю, что определение закрытой или статической переменной (это действительно зависит от области видимости, вам не нужно определять статическую переменную, если вам не нужно) - это правильный путь.

private string _HoveredItemTitle;

private void pieLegend_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    var hoveredItem = this.pieLegend.Items.FirstOrDefault(x => x.IsHovered);
    Clipboard.SetText(hoveredItem.Title);

    _HoveredItemTitle = hoveredItem.Title;
}

А в вашем другом методе было бы неплохо проверить, есть ли что-то в этой переменной, иначе может быть не очень хорошей идеей идти вперед с выполнением.

private void MenuItem_Click(object sender, RoutedEventArgs e)
{
    if (string.IsNullOrEmpty(_HoveredItemTitle))
    {
        //TODO: Something useful
        return;
    }

    //TODO
}

Я думаю, что основная идея, которую я пытаюсь донести до вас, заключается в том, что вы должны убедиться, что пользователь ничего не может сделать (или как можно меньше), чтобы вызвать ошибки в вашем приложении. В этом случае копирование текста в буфер обмена - это хорошо, но это скорее функция, чем требование. Приложению не нужно полагаться на буфер обмена, просто потому что в буфере обмена может быть полная ерунда вместо данных, которые вы на самом деле ожидаете.

Другие вопросы по тегам