2016-04-01 17 views
0

içinde benim kullanıcı denetiminin kaynak sözlükte tanımlamak ve bu yüzden gibi veri bağlamında olarak ayarlamak için çalışıyorum bir Görünüm modeli vardır:Neden ben değil statik bir kaynağın x ayarlayabilirsiniz: Adı xaml

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="pack://application:,,,/DMV;component/Controls.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
     <vm:TaskViewModel x:Key="taskViewModelKey" x:Name="taskViewModelName" /> 
    </ResourceDictionary> 
</UserControl.Resources> 

<UserControl.DataContext> 
    <StaticResourceExtension ResourceKey="taskViewModelKey"/> 
</UserControl.DataContext> 

Ama saha 'x: Name = 'taskViewModelName'' i hala geride koddan erişebilmesi için datacontext adını: Ben x set çalışıyorum

Could not register duplicate name 'taskViewModelName' in this scope

bir hata gösteriyor.

Bu hatayı nasıl giderebileceğime dair herhangi bir öneriniz var mı?

+0

"yinelenen ad 'taskViewModelName'". Bu ismi başka bir yerde kullanmadığına emin misin? – Clemens

+0

@Clemens Kesinlikle pozitif! – Timmoth

+2

Ayrıca, TaskViewModel örneğine DataContext özelliği tarafından arkasındaki kodda '(TaskViewModel) DataContext' gibi kolayca erişebilirsiniz, bu nedenle UserControl Kaynaklarında bulunmasına gerek yoktur. – Clemens

cevap

3

I am trying to set the x:Name of the datacontext so that i can still access it from the code behind

Birincisi, tek amacı bir süre sonra veri içeriği başlatmak istiyorsa, kaynaklarda görünümü modeli koymaya gerek yoktur.

<UserControl.DataContext> 
    <vm:TaskViewModel /> 
</UserControl.DataContext> 

ve kod arkasında (TaskViewModel)DataContext kullanın: Sadece doğrudan veri içeriği başlatılamıyor. İkinci olarak, kod arkasından bazı kaynağa erişmek kaynak tuşunu kullanmak istiyorsanız:

var viewModel = (TaskViewModel)Resources["taskViewModelKey"]; 
İlgili konular