【发布时间】:2017-03-28 08:14:11
【问题描述】:
我有一个ListView 和一个DataTemplate,在这个模板里面有几个文本块和一个按钮。该按钮有一个带有固定项目的上下文菜单。 listviewitems 的绑定工作正常,但将属性绑定到上下文菜单似乎不起作用。
<ListView x:Name="lv_clients" Margin="0 22 0 0" SelectionMode="Single">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid Grid.Column="0" Grid.RowSpan="2" Background="{Binding StateColor}">
</Grid>
<TextBlock Grid.Column="1" Text="{Binding DisplayString}" Foreground="Black" Height="20" FontWeight="Bold" Padding="2,2,0,0" />
<Button Click="Button_ListItem_Click" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Right" VerticalAlignment="Top">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Anrufen" Name="mn_call" Click="mn_call_Click" DataContext={Binding Number} />
</ContextMenu>
</Button.ContextMenu> ...</Button>
<StackPanel Grid.Column="1" Grid.Row="1">
<TextBlock Text="{Binding State}" Height="20" Padding="2,2,0,0"/>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding FirstEntry.KDKGRS}" Height="20" FontWeight="Bold" Padding="2,2,2,0" HorizontalAlignment="Left" Foreground="{Binding FirstEntry.ConvertedKGFARBE}" />
<TextBlock Text="{Binding FirstEntry.ADNAMI}" Height="20" Padding="0,2,0,0" HorizontalAlignment="Left" />
</StackPanel>
</StackPanel>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
为了便于阅读,我删除了一些不必要的代码(样式和列定义)。
重要的部分是Button 中的MenuItem。我的基础类有一个公共字符串属性Number。这应该传递给菜单项。但是MenuItem 的DataContext 在点击事件中始终为空。
我读过一些关于 contextmenu 不是可视化树的一部分的内容,但我无法理解它。有人能解释一下绑定的问题吗?
编辑底层类的代码: 再次删除了一些不必要的问题代码
public class PhoneClient
{
public String Name { get; set; }
public String Number { get; set; }
public String Extension { get; set; }
public String DisplayString
{
get
{
return String.IsNullOrEmpty(Name) ? Number : String.Format("{0} ({1})", Name, Extension);
}
}
}
以及ListBox的绑定:
List<PhoneClient> clients = new List<PhoneClient>();
clients = load(); //returns active Clients
lv_clients.ItemsSource = clients;
【问题讨论】:
-
能否请您出示 number 属性的代码?
标签: c# wpf listview binding contextmenu