0

我正在尝试将数据网格的 selectedItem 与 MVVM 中的属性绑定。问题是它不会触发属性的“设置”。

在 xaml 部分我有:

 <WPFCtrlDg:ExtDataGrid Name="_edgMessage" Grid.Row="1" 
      ItemsSource="{Binding Path=LNE_MESSAGE, Mode=OneWay}"
      SelectedItem="{Binding Path=CurrentMessage, Mode=TwoWay}">

在代码部分:

 private LNE_MESSAGE _currentMessage;
    public LNE_MESSAGE CurrentMessage
    {
        get
        {
            if (_currentMessage == null)
            {
                ICollectionView collectionView = CollectionViewSource.GetDefaultView(LNE_MESSAGE);
                if (collectionView != null)
                    return collectionView.CurrentItem as LNE_MESSAGE;
                return null;
            }
            return _currentMessage;
        }
        set
        {
            ICollectionView collectionView = CollectionViewSource.GetDefaultView(LNE_MESSAGE);
            if (collectionView != null)
                collectionView.MoveCurrentTo(value);

            _currentMessage = value;
            OnPropertyChanged(() => CurrentMessage);
        }
    }

extdatagrid 是一个自定义控件,并且 selected item 属性是这样完成的:

        public object SelectedItem
    {
        get { return GetValue(SelectedItemProperty); }
        set { SetValue(SelectedItemProperty, value); }
    }

    public static readonly DependencyProperty SelectedItemProperty =
        DependencyProperty.Register("SelectedItem", typeof(object), typeof(ExtDataGrid),
                                new UIPropertyMetadata((s, e) => 
                                                                {
                                                                    ExtDataGrid extDg = s as ExtDataGrid;
                                                                    Debug.Assert(extDg != null);
                                                                    extDg.CurrentItem = e.NewValue;
                                                                }));

关于如何正确绑定 selecteditem 属性的任何想法?

4

1 回答 1

0

检查您的数据上下文是否设置正确。并调试并查看本地窗口以查看数据上下文是否实际上是使用可视化助手设置的。另请参阅输出窗口以了解任何绑定错误。

乍一看,您的依赖属性看起来是正确的。

于 2013-01-02T10:57:07.803 回答