单击ContextMenu时,WPF获取ListView内TextBlock的内容

时间:2019-06-07 22:28:27

标签: c# wpf listview user-interface contextmenu

我有一个包含TextBlocks的ListView。 ListView有一个上下文菜单,单击上下文菜单时,我需要获取TextBlock的Content属性。

在上下文菜单中单击下载时,我需要获取“文档和设置”。 我已经尝试了多种解决方案,但是它们都导致Null Reference Exception。谢谢!

1 个答案:

答案 0 :(得分:0)

以下是我如何设置ItemsControl来调用命令并通过commandparameter传递项目以使用MVVM Light进行某些工作的示例。

<Window.Resources>
    <h:BindingProxy x:Key="proxy" Data="{Binding}"></h:BindingProxy>
</Window.Resources>
<Grid>
<ItemsControl ItemsSource="{Binding MyData}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                     <ColumnDefinition></ColumnDefinition>
                     <ColumnDefinition></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <Grid.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="Remove Me" Command="{Binding Data.MyCommand, Source={StaticResource proxy}}" CommandParameter="{Binding}"></MenuItem>
                   </ContextMenu>
                </Grid.ContextMenu>
               <TextBlock Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding SomeField}"></TextBlock>
           </Grid>
       </DataTemplate>
    </ItemsControl.ItemTemplate>
 </ItemsControl>
 </Grid>

我使用BindingProxy绑定上下文菜单的窗口数据上下文以获取命令,这是该代码。

/// <summary>
/// BindingProxy
/// Used to get Parent datacontext within Child control.
/// </summary>
public class BindingProxy : Freezable
{
    #region " Overrides Of Freezable "
    protected override Freezable CreateInstanceCore()
    {
        return new BindingProxy();
    }
    #endregion

    #region " Data "
    // Using a DependencyProperty as the backing store for Data.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty DataProperty = DependencyProperty.Register("Data", typeof(object), typeof(BindingProxy), new UIPropertyMetadata(null));

    public object Data
    {
        get { return (object)GetValue(DataProperty); }
        set { SetValue(DataProperty, value); }
    }
    #endregion
}

如您所见,CommandParameter仅使用{Binding}来获取ItemsSource的行的对象,该行绑定到ObservableCollection<SomeClass>.

希望这可以使您深入了解设置上下文菜单以执行某些工作。