文本框的上下文菜单

时间:2010-03-10 19:25:43

标签: 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>

提前致谢

1 个答案:

答案 0 :(得分: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>

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

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