Я использую шаблон 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 в другом методе, который у меня есть (чтобы загрузить коллекцию для другого элемента управления).
Спасибо