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