2014-12-04 5 views
0

Я новичок в wpf. В одном из моих проектов, у меня есть класс frmField, как показано ниже:Привязать члена класса к списку

public class frmFields 
{ 
    public bool succelssfulEnd = true; 
    public string fileName; 
    public List<string> errList = new List<string>(); 
} 

и список

<ListBox Name="LSTErrors" Grid.Row="11" Grid.Column="1" Grid.ColumnSpan="2" ItemsSource ="{Binding}" SelectionChanged="LSTErrors_SelectionChanged" /> 

мне нужно, чтобы связать errList с вышеуказанной ListBox таким образом, что любое изменение в списке отражаются в ListBox.

Есть ли кто-нибудь, чтобы вести меня?

+0

Если вы можете прочитать VB.Net, то у меня есть предыдущая [ответ здесь] (http://stackoverflow.com/a/8549710/109702), что поможет. Не забудьте установить DataContext окна, ваш ListBox затем наследует этот DataContext автоматически (если вы сначала не сбросите его где-нибудь в визуальном дереве). И используйте свойства или свойства зависимостей, а не поля. – slugster

ответ

0

Для обновления пользовательского интерфейса каждый раз, когда он изменяется, требуется ObservableCollection.

public class frmFields 
{ 
    public bool succelssfulEnd = true; 
    public string fileName; 

    private ObservableCollection<String> _errList = new ObservableCollection<String>(); 
    public ObservableCollection<String> ErrList { 
     get {return _errList;} 
     set { 
      _errList = value; 
      //your property changed if you need one 
     } 
    } 
} 

Обратите внимание, что вы можете привязать только к собственности или DependencyProperty, а не просто публичная переменная, как вы пытались.

В конструкторе вам нужно добавить:

this.DataContext = this; 

или в вашем XAML:

DataContext="{Binding RelativeSource={RelativeSource self}}" 

В корневом элементе. А затем связать ItemsSource как это:

<ListBox ItemsSource="{Binding ErrList, Mode=OneWay}"> 
    ... 
</ListBox>