WPF MVVM TreeView выбранный элемент не заполняет текущий объект выбора - PullRequest
1 голос
/ 03 июля 2010

Я использую шаблон WCF и MVVM для заполнения древовидного элемента управления, и мне нужно, чтобы выбранный элемент был передан в качестве параметра для другого метода в модели представления (для заполнения другого элемента управления).

Древовидное представление заполняется очень хорошо, но выбранное значение не передается в модель представления.например, в viewmodel:

    private ICollectionView m_SuppliersView;
    public ObservableCollection<SupplierItem> SupplierItems
    {
        get
        {
            return supplierItems;
        }
        private set
        {
            if (supplierItems == value)
            {
                return;
            }
            supplierItems = value;
            OnPropertyChanged("SupplierItems");
        }
    }
    public SupplierItem CurrentSupplier
    {
        get
        {
            if (m_SuppliersView != null)
            {
                return m_SuppliersView.CurrentItem as SupplierItem;
            }

            return null;
        }
    }
   private void OnCollectionViewCurrentChanged(object sender, EventArgs e)
    {
// view model is inherited from a base class.  base method listed below
        OnPropertyChanged("CurrentSupplier");   
    }

   protected virtual void OnPropertyChanged(string propertyName)
    {
        VerifyPropertyName(propertyName);

        var handler = PropertyChanged;
        if (handler != null)
        {
            var e = new PropertyChangedEventArgs(propertyName);
            handler(this, e);
        }
    }

    private void Load() // Load event to populate the treeview source object
    { 
// SupplierItems object is populated just fine and treeview displays just fine so I won't show how the sausage is made.   I believe the issue is here:  
        m_SuppliersView = CollectionViewSource.GetDefaultView(SupplierItems);

        if (m_SuppliersView != null)
        {
            m_SuppliersView.CurrentChanged += OnCollectionViewCurrentChanged;
        }

        OnPropertyChanged("CurrentSupplier");

в xaml:

<Window.Resources>
       <HierarchicalDataTemplate x:Key="SuppiersDistributorsTemplate" ItemsSource="{Binding Children}">
          <TextBlock Text="{Binding ManagedLocationName}"/>
       </HierarchicalDataTemplate>
</Window.Resources>


<TreeView x:Name="tvSuppliers" ItemsSource="{Binding SupplierItems}" 
          ItemTemplate="{StaticResource SuppiersDistributorsTemplate}" 
          SelectedValuePath="CurrentSupplier">              
</TreeView>

Есть мысли по этому поводу?
Когда я устанавливаю точку останова в методе "OnCollectionViewCurrentChanged", ничего не происходиткогда я нажимаю на узел дерева.т.е. CurrentSupplier никогда не обновляется, поэтому я не могу использовать CurrentSupplier в другом методе, который у меня есть (чтобы загрузить коллекцию для другого элемента управления).

Спасибо

1 Ответ

1 голос
/ 03 июля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...