C# 将多个字段绑定到MenuFlyoutItem

C# 将多个字段绑定到MenuFlyoutItem,c#,xaml,windows-phone-8.1,windows-8.1,C#,Xaml,Windows Phone 8.1,Windows 8.1,在我的Windows/Windows Phone通用应用程序中,我的XAML布局中有一个带有菜单的列表视图。列表视图包括一个人员列表。点击列表项可显示弹出按钮,可选择给此人发送电子邮件或打电话。现在,我正在使用菜单应用项的标记属性来保存电子邮件地址和电话号码,但我还希望能够获取此人的姓名,以便在打开电子邮件生成器或电话拨号器时发送该姓名 我正在使用标记元素来存储基本信息,但我想访问名称。我该怎么做?使用额外属性?以某种方式访问父对象的数据绑定 XAML: 我想,您应该能够通过检查单击的网格或菜单

在我的Windows/Windows Phone通用应用程序中,我的XAML布局中有一个带有
菜单的
列表视图
列表视图
包括一个人员列表。点击列表项可显示弹出按钮,可选择给此人发送电子邮件或打电话。现在,我正在使用
菜单应用项的
标记
属性来保存电子邮件地址和电话号码,但我还希望能够获取此人的姓名,以便在打开电子邮件生成器或电话拨号器时发送该姓名

我正在使用
标记
元素来存储基本信息,但我想访问名称。我该怎么做?使用额外属性?以某种方式访问父对象的数据绑定

XAML:


我想,您应该能够通过检查单击的网格或菜单项的DataContext来实现这一点:

private void Grid_轻触(对象发送器,轻触outedventargs e)
{
Item yourItem=(发送者作为网格)。DataContext作为项;
FrameworkElement=发送方作为FrameworkElement;
if(element!=null)弹出型按钮base.ShowAttachedFlyout(element);
}
//您也可以在菜单项中执行相同操作:
私有异步无效发送电子邮件\u单击(对象发送方,路由目标)
{
Item yourItem=(发送者为MenuFlyoutItem),DataContext为Item;
FrameworkElement=发送方作为FrameworkElement;
Windows.ApplicationModel.Email.EmailMessage mail=新建Windows.ApplicationModel.Email.EmailMessage();
mail.Subject=“Leadsheet职位分配”;
mail.To.Add(新的Windows.ApplicationModel.Email.EmailRecipient(element.Tag.ToString());
等待Windows.ApplicationModel.Email.EmailManager.ShowComposeNewEmailAsync(邮件);
}
上面的项是您在设置为ItemsSource的位置中使用的ItemClass。一旦你点击了项目,剩下的应该很简单。有了它,您也不再需要在标记属性中绑定

<ListView
            x:Name="itemPositions"
            AutomationProperties.AutomationId="ItemListView"
            AutomationProperties.Name="Items In Group"
            TabIndex="1"
            Grid.Row="1"
            ItemsSource="{Binding Positions}"
            SelectionMode="None"
            IsSwipeEnabled="false"
            Margin="0,0,0,0">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid Tapped="Grid_Tapped">
                <FlyoutBase.AttachedFlyout>
                    <MenuFlyout>
                        <MenuFlyoutItem IsEnabled="{Binding IsFilled}" Tag="{Binding Email}" x:Name="sendEmail" Text="email" Click="sendEmail_Click" />
                        <MenuFlyoutItem IsEnabled="{Binding IsFilled}" Tag="{Binding Phone}" x:Name="sendCall" Text="call" Click="sendCall_Click" />
                    </MenuFlyout>
                </FlyoutBase.AttachedFlyout>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="15"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>

                <Border Grid.Column="0" Visibility="{Binding IsVerified, Converter={StaticResource BoolToInvisible}}" Margin="0,0,0,5" Background="Firebrick" Width="10" Height="70" />
                <Border Visibility="{Binding Required, Converter={StaticResource BoolToVisible}}">
                    <Border Grid.Column="0" Visibility="{Binding IsFilled, Converter={StaticResource BoolToInvisible}}" Margin="0,0,0,5" Background="Gold" Width="10" Height="70" />
                </Border>
                <StackPanel Margin="10,0,0,10" Grid.Column="1">
                    <TextBlock Text="{Binding PositionName}" Style="{ThemeResource ListViewItemTextBlockStyle}"/>
                    <TextBlock Text="{Binding DisplayName}" Style="{ThemeResource ListViewItemSubheaderTextBlockStyle}" />
                </StackPanel>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
private void Grid_Tapped(object sender, TappedRoutedEventArgs e)
{
    FrameworkElement element = sender as FrameworkElement;
    if (element != null) FlyoutBase.ShowAttachedFlyout(element);
}

private async void sendEmail_Click(object sender, RoutedEventArgs e)
{
    FrameworkElement element = sender as FrameworkElement;
    Windows.ApplicationModel.Email.EmailMessage mail = new Windows.ApplicationModel.Email.EmailMessage();
    mail.Subject = "Leadsheet Position Assignment";
    mail.To.Add(new Windows.ApplicationModel.Email.EmailRecipient(element.Tag.ToString()));
    await Windows.ApplicationModel.Email.EmailManager.ShowComposeNewEmailAsync(mail);
}

private void sendCall_Click(object sender, RoutedEventArgs e)
{
    FrameworkElement element = sender as FrameworkElement;
    Windows.ApplicationModel.Calls.PhoneCallManager.ShowPhoneCallUI(element.Tag.ToString(), "");
}