2013-08-29 6 views
0

Существует UserControl с свойством - набором класса Item, в Item is dep property Name. Там ViewModel, свойство, которое требует привязки к имени элемента. ViewModel находится в DataContext UserControl.Привязать к свойству коллекции, объявленной в xaml

код:

public partial class UserControl1 
{ 
    public ObservableCollection<Item> Items { get; set; } 
... 

public class Item : DependencyObject 
{ 
    public string Name 
    { 
      get { return (string)GetValue(NameProperty); } 
      set { SetValue(NameProperty, value); } 
    } 

    public static readonly DependencyProperty NameProperty = DependencyProperty.Register("Name", typeof(string), typeof(Item), new  
    PropertyMetadata(null)); 
} 

public class ViewModel 
{ 
    public string Name { get; set; } 
} 

userControl.DataContext = new ViewModel { Name = "Test" }; 
<wpfApplication6:UserControl1 x:Name="userControl"> 
      <wpfApplication6:UserControl1.Items> 
       <wpfApplication6:Item Name="{Binding Name, RelativeSource={RelativeSource FindAncestor, 
       AncestorType=wpfApplication6:UserControl1}}" /> 
      </wpfApplication6:UserControl1.Items> 
</wpfApplication6:UserControl1> 

Там не работает. Пожалуйста, помогите мне.

+3

То же самое, что я расскажу всем остальным: Изучите MVVM, прежде чем писать одну строку кода в WPF. ObservableCollections не относятся к UserControls. –

+0

Реалистичный? Почему нет? – ortuomka

+0

Потому что [UI не Data] (http://stackoverflow.com/a/14382137/643085). Поэтому вы не должны помещать Data в классы пользовательского интерфейса. –

ответ

0
 <wpfApplication6:UserControl1 x:Name="userControl"> 
      <wpfApplication6:UserControl1.Items> 
       <wpfApplication6:Item Name="{Binding Path=DataContext.Name, RelativeSource={RelativeSource FindAncestor, 
         AncestorType=wpfApplication6:UserControl1}}" /> 
      </wpfApplication6:UserControl1.Items> 
     </wpfApplication6:UserControl1> 
Смежные вопросы