我有一个包含TextBlocks的ListView。 ListView有一个上下文菜单,单击上下文菜单时,我需要获取TextBlock的Content属性。
在上下文菜单中单击下载时,我需要获取“文档和设置”。 我已经尝试了多种解决方案,但是它们都导致Null Reference Exception。谢谢!
答案 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>.
希望这可以使您深入了解设置上下文菜单以执行某些工作。