2013-11-18 3 views
0

У меня есть наблюдаемая коллекция в моем классе окон, которую я хочу привязать к списку в xaml. Я занимаюсь поиском в течение большей части часа с половиной, и все, что я могу придумать, так как ответ «Вау, почему это должно быть так умственно»?Связывание списка с наблюдаемой коллекцией - исчерпывающие идеи

Я был бы очень признателен, если бы кто-то мог пролить свет на это, моя коллекция называется «TestItems», а тестовый элемент имеет две переменные - «имя» и «тип» - обе строки.

Я хотел бы, чтобы отобразить все «имя» свойств TestItems в моей наблюдаемой коллекции ...

Любая помощь оценили, я даже успел поиздеваться это с C++ и Qt в считанные минут, но, похоже, сейчас я ускользнул от C#.

Текущий XAML:

<ListBox Name="ItemsOfData" 
    ItemsSource="{Binding TestItems}" 
    DisplayMemberPath="name" 
    IsSynchronizedWithCurrentItem="True"> 
</ListBox> 

Текущий C# код:

public ObservableCollection<TestItem> TestItems = new ObservableCollection<TestItem>(); 

public partial class MainWindow : Window 
{ 
    public ObservableCollection<TestItem> TestItems = new ObservableCollection<TestItem>(); 

    public MainWindow() 
    { 
     InitializeComponent(); 

     this.DataContext = this.ItemsOfData; 

     TestItem test = new TestItem("name", "type"); 

     this.TestItems.Add(test); 
    } 
} 
+4

Так что у вас прямо сейчас? – Jon

+0

Это настройка в шаблоне mvvm? Где вы создаете свою коллекцию тестовых элементов? В коде позади? Или в ViewModel? –

+0

это не так сложно, однако я должен согласиться с тем, что многие вещи в WPF настолько странные, и поэтому у него очень крутая кривая обучения, новичок должен много работать, даже если он профессионал в какой-то другой области. –

ответ

2

Можно только привязать к государственной собственности
Нужна GET, чтобы сделать его общественным достоянием
И нужно исправить DataContext

public partial class MainWindow : Window 
{ 
    private ObservableCollection<TestItem> testItems = new ObservableCollection<TestItem>(); 
    public ObservableCollection<TestItem> TestItems { get { return testItems ; } 

    public MainWindow() 
    { 
     InitializeComponent(); 
     this.DataContext = this;  
     TestItem test = new TestItem("name", "type");  
     this.testItems.Add(test); 
    } 
} 
+0

Спасибо миллион! – Slippy

0

Заменить это:

this.DataContext = this.ItemsOfData; 

к этому:

this.DataContext = this; 

Вы установили неверный контекст. Вы можете использовать окно Output для обнаружения ошибок в привязках.

1

Это просто. До тех пор, пока у вас есть в вашей коллекции что-то вроде этого в ViewModel или в коде позади и добавления элементов в этой коллекции:

private ObservableCollection<TestItem> _TestItems; 
    public ObservableCollection<TestItem> TestItems 
    { 
    get { return _TestItems;} 
    set 
     { 
      _TestItems = value; 
      OnPropertyChanged("TestItems"); 
     } 
} 

Если вы используете ViewModel, то вам необходимо установить DataContext в конструктор кода окна позади, чтобы:

//substitute with whatever your viewmodel class name is 
DataContext = new ViewModel() 

И в вашем XAML, как это:

<ListBox ItemsSource="{Binding TestItems}"/> 
Смежные вопросы