文本框的上下文菜单

dev*_*per 0 wpf wpf-controls

我想要做的是有两个表,即user和userprofile,它们都有几乎相同的字段.我将以电子邮件字段为例.有一个文本框,其中显示用户表电子邮件字段值.我想要做的是,有一个上下文菜单,当用户右键单击文本框时,菜单会显示User和UserProfile电子邮件字段值.- 开发人员1小时前
无论从上下文菜单中选择什么值,文本框都会显示该值.您可以使用Binding Email1和Binding Email2,因为从数据库中获取这两个值没有任何问题,因此我将相应地更改我的代码.由于我是WPF和.NET框架本身的新手,我不知道如何实现这一目标.如果我这次已经清楚了,请告诉我.我不知道如何处理命令和事件.任何人都可以告诉我代码来解释这个..

  <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>
Run Code Online (Sandbox Code Playgroud)

提前致谢

Dav*_*ave 6

有可能给你一个WPF/MVVM noob答案并且受到抨击,这里就是这样.我不能建议你使用数据库进行数据绑定,因为我从来没有这样做过,所以我只是给你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>
Run Code Online (Sandbox Code Playgroud)

在数据绑定到对象的情况下,PreferredEmail,Email1和Email2将绑定到依赖项属性或引发PropertyChanged事件的属性.这就是您的ViewModel(或任何您想要调用较低级代码)将更新数据的方式.如果您在代码隐藏中更改这些值,最终它将自动反映在上下文菜单中.然后,您必须实现两个基于ICommand的类来处理PreferredEmail的设置.

我认为实现两个命令处理程序是非常蹩脚的,如果你必须添加更多的电子邮件源,它肯定不会很好地扩展.我认为更好的解决方案是使用一个命令处理程序和一个CommandParameter,它是选定的MenuItem头,但我不知道该怎么做.但无论如何,如果你处于绑定状态,那么两个命令处理程序解决方案仍然有效.