Риск дать вам ответ noob WPF / MVVM и получить пламя, здесь идет. Я не могу посоветовать вам связывание данных с базами данных, так как я никогда не делал этого, поэтому я просто дам вам XAML, и вы сами поработаете над концом базы данных.
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<TextBox Height="28" Text={Binding PreferredEmail}">
<TextBox.ContextMenu>
<ContextMenu>
<MenuItem Header="{Binding Email1}" Command="{Binding Email1Command}" />
<MenuItem Header="{Binding Email2}" Command="{Binding Email2Command}" />
</ContextMenu>
</TextBox.ContextMenu>
</TextBox>
</Grid>
</Page>
В случае привязки данных к объектам PreferredEmail, Email1 и Email2 будут привязываться к свойству зависимости или свойству, которое вызывает событие PropertyChanged. Вот как ваша ViewModel (или как вы хотите назвать код нижнего уровня) будет обновлять данные. Если вы измените эти значения в коде позади, в конечном итоге это автоматически отобразится в контекстном меню. Затем вам нужно реализовать два класса на основе ICommand для обработки параметра PreferredEmail.
Я думаю, что реализовать два обработчика команд - это супер, и это, конечно, не будет хорошо масштабироваться, если вам нужно будет добавить больше источников электронной почты. Я думаю, что лучшим решением было бы использовать один обработчик команд и CommandParameter, который является выбранным заголовком MenuItem, но я не знаю, как это сделать. Но в любом случае решение для двух командных обработчиков все равно будет работать, если вы находитесь в привязке.