2013-03-05 4 views
0

У меня есть приложения для вызова класса. Он имеет Observable collection под названием Доступные типы. Я хочу привязать эту доступную коллекцию AvailableTypes к wpf ComboBox. Когда форма загружена, AppId должен быть загружен в comboBox. Не могли бы вы дать мне решение для этого?Bind observerbaleCollection to wpf combo box

class Apps: INotifyPropertyChanged{ 

    ServiceReference1.AssetManagerServiceClient client; 
    ObservableCollection<string> availableType; 
    public ObservableCollection<string> AvailableTypes 
    { 
     get 
     { 
      if (availableType == null) 
      { 
       availableType = new ObservableCollection<string>(); 

      } 
      client = new ServiceReference1.AssetManagerServiceClient(); 
      List<string> AssestList = client.GetAppIds().ToList<string>(); 

      foreach (string appid in AssestList) 
      { 
       availableType.Add(appid); 
      } 
      return availableType; 

     } 
     set 
     { 
      availableType = value; 
      NotifyPropertyChanged("AvailableTypes"); 

     } 
    } 


    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 
} 

ответ

0

В вашем xaml-коде это простой пример того, как вы можете привязываться к своей combobox.

<ComboBox ItemsSource={Binding Path=AvailableTypes} /> 

Вам также необходимо загрузить свою модель просмотра в DataContext вашего окна.

var window = new MainWindow 
{ 
    DataContext = new Apps() 
}; 
window.Show(); 

Если вы хотите открыть окно при запуске приложения, вы можете сделать это вместо того, чтобы

public partial class App : Application 
{ 
    protected override void OnStartup(StartupEventArgs e) 
    { 
     base.OnStartup(e); 


     var window = new MainWindow 
     { 
      DataContext = new Apps() 
     }; 

     window.Show(); 
    } 
} 
0

Не перегружать имущественные геттеры/сеттеры. Сделайте это проще.

Я рекомендую использовать свойства для авто и NotifyPropertyWeaver или использовать PostSharp post build compile-time inced instuctions для поддержки интерфейса INotifyPropertyChanged.

Это делает вашу модель для просмотра более читаемой и удобной в управлении/понимании.

В форме «Loaded» или «NavigatedTo» в SL вы можете начать загрузку своих данных из любого места, где хотите, и установить соответствующие свойства после завершения загрузки (в обработчиках обратных вызовов/событий не забывайте об использовании диспетчера пользовательского интерфейса в то время как обновление привязанных свойств)