Контекстное меню для текстового поля - PullRequest
0 голосов
/ 10 марта 2010

Что именно я хочу сделать, так это то, что есть 2 таблицы, то есть user и userprofile, и обе они имеют почти идентичные поля. Я возьму пример поля электронной почты. Существует текстовое поле, в котором отображается значение поля электронной почты таблицы пользователя. Что я хочу сделать, так это создать контекстное меню, чтобы, когда пользователь щелкает правой кнопкой мыши текстовое поле, в меню отображались значения полей электронной почты User и UserProfile. - разработчик 1 час назад
Какое бы значение вы ни выбрали в контекстном меню, текстовое поле отображает это значение. Вы можете использовать Binding Email1 и Binding Email2, поскольку у меня нет проблем с получением этих двух значений из базы данных, поэтому я соответствующим образом изменю свой код. Поскольку я новичок в WPF и самой .NET Framework, я не уверен, как этого добиться. Пожалуйста, дайте мне знать, если я дал понять, на этот раз. Я не уверен, как обрабатывать команды и события. Кто-нибудь может показать мне код, чтобы сопоставить это ..

  <TextBox Style="{StaticResource FieldStyle}" Text="{Binding Email1, UpdateSourceTrigger=PropertyChanged}">
                            <TextBox.BorderBrush>
                                <MultiBinding Converter="{StaticResource TextBoxBorderConverter}">
                                    <Binding Path="Email1"/>
                                    <Binding Path="Email2"/>
                                </MultiBinding>
                            </TextBox.BorderBrush>
                        </TextBox>

Заранее спасибо

1 Ответ

6 голосов
/ 10 марта 2010

Риск дать вам ответ 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, но я не знаю, как это сделать. Но в любом случае решение для двух командных обработчиков все равно будет работать, если вы находитесь в привязке.

...