设置为null时,不会触发DependencyProperty PropertyChangedCallback

时间:2014-01-30 20:10:00

标签: wpf dependency-properties

我正在使用从Telerik Grid派生的网格控件来添加DependencyProperty CurrentSelection,以便我可以以Mvvm方式使用它。

 public static readonly DependencyProperty CurrentSelectionProperty = DependencyProperty.Register(
        "CurrentSelection", 
        typeof(ObservableCollection<object>), 
        typeof(TelerikGrid),
        new PropertyMetadata(new ObservableCollection<object>(), **DependencyPropertyDebugger**));

我使用它的所有其他地方似乎都很好用......

现在我们在网格中添加了一个ContextMenu,右键单击并打印选择,非常简单...... 它似乎仍然可以正常工作。

 <MenuItem Command="{Binding CommandPrintReport}">
                </MenuItem>

此MenuItem现已模板化,添加用于打开窗口对话框的“参数”按钮。

<MenuItem.HeaderTemplate>
                        <DataTemplate>
                            <DockPanel>
                                <TextBlock DockPanel.Dock="Left" Text="Print selection" Margin="0,0,15,0"/>

                                    <Button Style="{StaticResource MenuItemButton}" DockPanel.Dock="Right" Command="{x:Static NS:ViewModel.CommandReportOptions}">
                                    <Image Source="{Binding Source={x:Static ImagePath:General.ConfigLite}}" />
                                </Button>
                            </DockPanel>
                        </DataTemplate>
                    </MenuItem.HeaderTemplate>

当单击此按钮而不是打印选择时,依赖项属性似乎设置为null,因此我们将丢失选择。当查看属性更改回调时,使用DependencyPropertyDebugger,我可以看到该值被设置为某些选择,但是当它设置回null时它不会被触发...

private static void DependencyPropertyDebugger(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        Console.WriteLine("{0}.{1}: {2}", d.DependencyObjectType.Name, e.Property.Name, e.NewValue);
    }

我的命令

public ICommand CommandPrintReport { get; private set; }
    public static ICommand CommandReportOptions { get; set; }

我很感激一些帮助 感谢

1 个答案:

答案 0 :(得分:0)

而不是使用静态命令,

Command="{x:Static NS:ViewModel.CommandReportOptions}"

我找到了一种不以静态方式使用它的方法

Command="{Binding DataContext.CommandReportOptions, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type MyPage}}

然后它解决了我的问题,我当前的选择保持其价值。