我想要做的是有两个表,即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)
提前致谢
有可能给你一个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头,但我不知道该怎么做.但无论如何,如果你处于绑定状态,那么两个命令处理程序解决方案仍然有效.