У меня есть ListView
с DataTemplate
, внутри этих шаблонов есть несколько текстовых блоков и кнопка. Кнопка имеет контекстное меню с фиксированными элементами. Связывание listviewitems отлично работает, но привязка свойства к контекстному меню не работает.MenuItem binding datacontext в listview
<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>
я удалил некоторые ненужные биты кода (стиль и ColumnDefinitions) для удобства чтения.
Важной частью является MenuItem
внутри Button
. Мой базовый класс имеет общедоступное свойство строки Number
. Это нужно передать в пункт меню. Но DataContext
MenuItem
всегда имеет значение null внутри события click.
Я прочитал что-то о контексте, не являющемся частью визуального дерева, но я не могу обвести вокруг него голову. Может ли кто-нибудь объяснить проблему с привязкой?
Редактировать код для базового класса: снова удалены некоторые ненужные код для вопроса
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;
Не могли бы вы показать код для номера собственность пожалуйста? –