ContextMenu命令绑定未刷新
本文关键字:刷新 绑定 命令 ContextMenu | 更新日期: 2023-09-27 18:29:18
我已经遇到了这个问题,但我不记得如何解决它
我有一个ParentViewModel,它有一个组合框和一个ContentPresenter。ChildViewModel的组合框显示列表。选择其中一个后,将使用内容呈现器进行显示。
ChildViewModel有一个在列表中添加项的命令。如果该命令绑定在按钮上,则可以查找,但当使用contextMenu完成时,该命令在第一次执行时绑定,但如果ChildViewModel更改(当在组合框中选择另一个视图模型时),则不会更改。该项目将添加到上一个选定的ChildViewModel中。
我该如何解决这个问题?
父视图模型:
public class Test1ViewModel:ObservableObject
{
public Test1ViewModel()
{
ViewModels = new ObservableCollection<TestViewModel>();
ViewModels.Add(new TestViewModel("View model1"));
ViewModels.Add(new TestViewModel("View model2"));
SelectedViewModel = ViewModels.FirstOrDefault();
}
private TestViewModel _selectedViewModel;
public TestViewModel SelectedViewModel
{
get { return _selectedViewModel; }
set
{
_selectedViewModel = value;
RaisePropertyChanged(() => SelectedViewModel);
}
}
public ObservableCollection<TestViewModel> ViewModels { get; set; }
}
父视图:
<StackPanel>
<ComboBox ItemsSource="{Binding ViewModels}" DisplayMemberPath="Name" SelectedItem="{Binding SelectedViewModel}"></ComboBox>
<ContentPresenter Content="{Binding SelectedViewModel}"/>
</StackPanel>
儿童视角模型:
public class TestViewModel : ObservableObject
{
private int _idx;
public TestViewModel(string vmName)
{
Name = vmName;
ListOfValues = new ObservableCollection<string>();
ListOfValues.Add("Value" + _idx++);
ListOfValues.Add("Value" + _idx++);
AddItemCommand = new DelegateCommand(() => ListOfValues.Add("Value" + _idx++));
}
public string Name { get; private set; }
public ObservableCollection<string> ListOfValues { get; set; }
public DelegateCommand AddItemCommand { get; private set; }
}
儿童视图
<StackPanel>
<Button Content="AddValue" Command="{Binding AddItemCommand}"/> <!--Binding work when selected view model is changed-->
<TextBlock Text="{Binding Name}"/>
<ListBox ItemsSource="{Binding ListOfValues}">
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="AddValue" Command="{Binding AddItemCommand}"/> <!--Binding doesn't work when selected view model is changed-->
</ContextMenu>
</ListBox.ContextMenu>
</ListBox>
提前感谢
你说得对。
上下文菜单不在可视化树中,并且在加载程序时只绑定其数据上下文一次。
为了修复它,我所做的是实现Josh Smith的虚拟分支技术。
看看我发布的一个类似问题的答案