Warum dies funktioniert:WPF => Binding ContextMenu mit Collection
<Button x:Name="btnCritereAdd" Content="{Binding Source={x:Static resx:resMain.lblCriterAdd}}" Style="{StaticResource btnStandardClr}" Click="btnMenuPopup_Click" ContextMenuService.Placement="Bottom">
<Button.ContextMenu>
<ContextMenu x:Name="cmuCriteres">
<ContextMenu.ItemsSource>
<Binding Path="CriteresDispo" />
</ContextMenu.ItemsSource>
<ContextMenu.InputBindings>
<MouseBinding MouseAction="LeftClick" Command="" />
</ContextMenu.InputBindings>
</ContextMenu>
</Button.ContextMenu>
</Button>
Aber nicht dies:
<Button x:Name="btnCritereAdd" Content="{Binding Source={x:Static resx:resMain.lblCriterAdd}}" Style="{StaticResource btnStandardClr}" Click="btnMenuPopup_Click" ContextMenuService.Placement="Bottom">
<Button.ContextMenu>
<ContextMenu x:Name="cmuCriteres">
<ContextMenu.Resources>
<CollectionViewSource x:Key="cvsCriteres" Source="{Binding CriteresDispo}"/>
</ContextMenu.Resources>
<ContextMenu.ItemsSource>
<Binding Source="{StaticResource cvsCriteres}" />
</ContextMenu.ItemsSource>
<ContextMenu.InputBindings>
<MouseBinding MouseAction="LeftClick" Command="" />
</ContextMenu.InputBindings>
</ContextMenu>
</Button.ContextMenu>
</Button>
stelle ich die Datacontext auf Knopf in Codebehind:
btnCritereAdd.DataContext = vmFiltresChamps;
I versucht mit "UpdateSourceTrigger = PropertyChanged" und "NotifyOnSourceUpdated = True" für beide Fälle, aber nichts ändert sich. Die Liste ist leer ...
Haben Sie eine Idee?
VM-Seite: Eigentum:
public ItemCollection CriteresDispo { get { return _CriteresDispo; } set { _CriteresDispo = value; RaisePropertyChanged(nameof(CriteresDispo)); } }
Befehl von Code aufgerufen hinter
public RelayCommand<ItemCollection> LoadCriteresCommand { get; set; }
private void LoadCriteres(ItemCollection obj) {
var ht = new tblFiltreChamps();
Classes.clsUtils.GetFiltresSel(obj, ht);
CriteresDispo = new ItemsControl().Items;
if (ht.items.Count > 0) {
foreach (var item in ht.items.OrderBy((x) => x.Desc).ToList()) {
var mi = new MenuItem() { Header = item.Desc, Tag = item };
mi.Command = AddCritereCommand;
mi.CommandParameter = item;
CriteresDispo.Add(mi);
}
}
if (CriteresAddAction != null) CriteresAddAction();
}
Versuchen Sie, die CollectionViewSource zu den Schaltflächen Ressource, Ressource nach oben gehen den visuellen Baum hinauf und horizontale Lookup kann eigentümlich gehen, Fehler, überprüfen Sie Ihr Ausgabefenster für Binding-Fehler – MikeT
Hallo MikeT, habe ich bereits versucht, es in button.resource aber nichts ändert sich. Was ist die horizontale Suche? – david
eine horizontale Suche sucht nach Ressourcen in der gleichen Ebene der visuellen Struktur definiert – MikeT