wpf 在触发visualstudio热重新加载功能后,绑定到控件中的命令只工作一次

lsmd5eda  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(120)

我已经建立了一个代表下拉菜单的控件。它接受以下参数:

public static readonly DependencyProperty DropDownCommandsDictProperty = DependencyProperty.Register(
        nameof(DropDownCommandsDict),
        typeof(ObservableCollection<Tuple<string, IAsyncRelayCommand>>),
        typeof(ToggleButtonDropDownControl),
        new FrameworkPropertyMetadata(
            new ObservableCollection<Tuple<string, IAsyncRelayCommand>>(),
            FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

    public ObservableCollection<Tuple<string, IAsyncRelayCommand>> DropDownCommandsDict
    {
        get => (ObservableCollection<Tuple<string, IAsyncRelayCommand>>)GetValue(DropDownCommandsDictProperty);
        set => SetValue(DropDownCommandsDictProperty, value);
    }

字符串
下拉控件与一个ToggleButton和一个Popup一起显示其命令,参见屏幕截图Screenshot of dropdown menu
绑定定义如下。
在下拉控件中:

<ListView ItemsSource="{Binding Path=DataContext.RecipeDropDownCommandsDict, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}, AncestorLevel=1}}">


组件的用途:

<sharedControls:ToggleButtonDropDownControl 
    Caption="..."
    DropDownCommandsDict="{Binding Path=DataContext.RecipeDropDownCommandsDict, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}, AncestorLevel=1}}"
    CommandParameter="{Binding Path=.}"
    VerticalAlignment="Center" />


绑定在编辑自身和触发visual studio热重载功能后仅工作一次。

如果我将代码从组件中移出并直接粘贴到Xaml中,则一切都按预期工作并执行命令

我在可视化树中上下遍历以查找导致此问题的错误。下拉列表在可视化树的外部-具体来说是在它的底部。
我怀疑这个错误是在这个问题顶部的DependencyProperty中的某个地方。
任何建议都很感激。

编辑:原来样式设置器重写了可单击控件,因此它能够正确处理事件,热重载功能只是让理解/调试变得棘手。

s6fujrry

s6fujrry1#

原来是一个样式设置器重写了可点击控件,因此它能够正确处理事件,热重载功能只是使理解/调试变得棘手。

相关问题