WPF自定义网格,具有使用数据绑定设置的属性

时间:2014-08-19 12:59:22

标签: wpf dependency-properties

我正在使用WPF并且我有一个自定义数据网格。我想要做的是添加一个属性(CustomGridCommands)到该网格,我可以从任何视图在xaml中设置。

我目前所拥有的内容如下(我稍微更改了代码以简化它):

自定义网格C#代码:

public class CustomWPFDataGrid : DataGrid, INotifyPropertyChanged
{
    public static readonly DependencyProperty CustomContextMenuCommandsProperty =
        DependencyProperty.Register("CustomContextMenuCommands", 
                                    typeof (ObservableCollection<WPFBaseCommand>),
                                    typeof (CustomWPFDataGrid));

    [Bindable(true)]
    public ObservableCollection<WPFBaseCommand> CustomContextMenuCommands
    {
        get { return (ObservableCollection<WPFBaseCommand>) GetValue(CustomContextMenuCommandsProperty); }
        set { SetValue(CustomContextMenuCommandsProperty, value); }
    }
...
...
}

XAML代码:

<common:CustomWPFDataGrid 
        ItemsSource="{Binding Path=ItemList}"
        CustomContextMenuCommands="{Binding Path=CustomGridCommands, Mode=TwoWay}">
....
</common:CustomWPFDataGrid >

我绑定到包含网格的视图的对象如下:

public class TestViewModel
{
    public ObservableCollection<TestDisplayViewModel> ItemList { get; set; }
    public ObservableCollection<WPFBaseCommand> CustomGridCommands;

    public TestViewModel()
    {
    ... population of objects here
    }

当我运行它并检查datagrid中的属性值(CustomContextMenuCommands)时,它始终为null。

任何想法我做错了什么?

修改

永远不会命中“CustomContextMenuCommands”的setter。

1 个答案:

答案 0 :(得分:0)

ViewModel中的

CustomGridCommands是一个字段,View无法使用它。如果您将其设为公共财产,那么它将变得可访问。有关可用作绑定源的更多详细信息,请参见MSDN - Binding Sources

如果使用WPF 4.5,静态属性也可用于绑定,如release notes中所述。