为什么这是工作:WPF =>绑定文本菜单与CollectionViewSource
<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>
但不是这样的:
btnCritereAdd.DataContext = vmFiltresChamps;
我:
<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>
我在代码隐藏设置的DataContext上的按钮在两种情况下尝试使用“UpdateSourceTrigger = PropertyChanged”和“NotifyOnSourceUpdated = True”,但没有任何更改。 该清单是空的...
你有什么想法吗?
VM方: 物业:
public ItemCollection CriteresDispo { get { return _CriteresDispo; } set { _CriteresDispo = value; RaisePropertyChanged(nameof(CriteresDispo)); } }
命令通过代码调用背后
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();
}
尝试将CollectionViewSource移动到按钮资源,查找资源查找可视化树和水平查找可能会变得奇特,失败的情况是检查输出窗口是否有绑定错误 – MikeT
您好MikeT,我已经尝试tu把它放在button.resource中,但没有任何变化。 什么是水平查找? – david
水平查找正在寻找在相同级别的可视化树中定义的资源 – MikeT