2013-05-08 98 views
-1

我試圖將列表框綁定到列表框的內容。出於某種原因,我得到了bluetape列表的結果,但BluetapeList的內容並沒有進入列表框。任何幫助將非常感激!將列表框綁定到列表<string>

XAML:

<ListBox 
      Name="lbxTapeIn" 
      Grid.Row="1" 
      Grid.Column="1" 
      Grid.ColumnSpan="1" 
      Width="70" 
      Height="80" 
      SelectionChanged="TapeSelectionChanged" 
      ItemsSource="{Binding}" 
      SelectedValue="{Binding SelectedBt}" 
      Background="DeepSkyBlue" 
      Foreground="MidnightBlue"     
      HorizontalAlignment="Center" 
      VerticalAlignment="Center" 
      Margin="5"/> 

代碼背後:

public partial class OverrideAoiBinningWindow : Window 
{ 
    private OverrideAoiBinningWindowViewModel ovAoiBinWin; 
    public OverrideAoiBinningWindow() 
    { 
     InitializeComponent(); 
     ovAoiBinWin = new OverrideAoiBinningWindowViewModel(tvwWaferList, txtFilter); 
     AssignDataContexts(); 
    } 
    private void AssignDataContexts() 
    { 
     btnChooseWafer.DataContext = ovAoiBinWin; 
     btnSave.DataContext = ovAoiBinWin; 
     txtWafer.DataContext = ovAoiBinWin; 
     cbxAoiState.DataContext = ovAoiBinWin; 
     lbxTapeIn.DataContext = ovAoiBinWin.BluetapeList; 
    } 
    private void TapeSelectionChanged(object sender, RoutedEventArgs e) 
    { 
     if (!string.IsNullOrEmpty(ovAoiBinWin.SelectedWafer)) 
     { 
      if (cbxAoiState.SelectedValue != null) 
      { 
       btnSave.IsEnabled = true; 
      } 
     } 
    } 
    private void AoiStateChanged(object sender, RoutedEventArgs e) 
    { 
     if (!string.IsNullOrEmpty(ovAoiBinWin.SelectedWafer)) 
     { 
      if (lbxTapeIn.SelectedValue != null) 
      { 
       btnSave.IsEnabled = true; 
      } 
     } 
    } 
    private void Close(object sender, RoutedEventArgs e) 
    { 
     this.Close(); 
    } 
} 

視圖模型:

public class OverrideAoiBinningWindowViewModel : ViewModelBase, ISelectWafers 
{ 
    public OverrideAoiBinningWindowViewModel(TreeView tvwWaferList, TextBox txtFilter) 
    { 
     // Set private fields 
     this.tvwWaferList = tvwWaferList; 
     this.txtFilter = txtFilter; 

     // Instantiate objects and initialize settings 
     this.InstantiateObjects(); 
     this.SetControlSettings(); 

     // Run the initialization thread 
     initThread.RunWorkerAsync(); 
    } 
    public string SelectedWafer 
    { 
     get 
     { 
      return selectedWafer; 
     } 
     set 
     { 
      selectedWafer = value; 
      OnPropertyChanged("SelectedWafer"); 
     } 
    } 
    public string SelectedBt 
    { 
     get 
     { 
      return selectedBt; 
     } 
     set 
     { 
      selectedBt = value; 
      OnPropertyChanged("SelectedBt"); 
     } 
    } 
    public string SelectedAoiState 
    { 
     get 
     { 
      return selectedAoiState; 
     } 
     set 
     { 
      selectedAoiState = value; 
      OnPropertyChanged("SelectedAoiState"); 
     } 
    } 
    public List<string> AOIStateList 
    { 
     get 
     { 
      return aoiStateList; 
     } 
     set 
     { 
      aoiStateList = value; 
      OnPropertyChanged("AOIStateList"); 
     } 
    } 
    public List<string> BluetapeList 
    { 
     get 
     { 
      return bluetapeList; 
     } 
     set 
     { 
      bluetapeList = value; 
      OnPropertyChanged("BluetapeList"); 
     } 
    } 
    public ICommand SelectWaferCommand 
    { 
     get 
     { 
      if (selectWaferCommand == null) 
      { 
       selectWaferCommand = new DelegateCommand(SelectWafer); 
      } 
      return selectWaferCommand; 
     } 
    } 
    public ICommand SaveAoiStateCommand 
    { 
     get 
     { 
      if (saveAoiStateCommand == null) 
      { 
       saveAoiStateCommand = new DelegateCommand(SaveAoiState); 
      } 
      return saveAoiStateCommand; 
     } 
    } 

    private void InstantiateObjects() 
    { 
     initThread = new BackgroundWorker(); 
     aoiStateList = new List<string>(); 
     bluetapeList = new List<string>(); 
     converter = new WaferIDConverter(); 
    } 
    private void SetControlSettings() 
    { 
     initThread.WorkerReportsProgress = false; 
     initThread.WorkerSupportsCancellation = false; 
     initThread.DoWork += InitThread_DoWork; 
     initThread.RunWorkerCompleted += InitThread_RunWorkerCompleted; 
    } 
    private void PopulateAoiStateList() 
    { 
     aoiStateList.Add("True"); 
     aoiStateList.Add("False"); 
     aoiStateList.Add("NotBinned"); 
     aoiStateList.Add("NeverAOI"); 
    } 
    private void PopulateBluetapeList() 
    { 
     waferQueries = new WaferQueries(
      DataLibrary.GetSingulationOne(selectedWafer)); 
     foreach (BlueTape tape in waferQueries.GetBlueTapeList()) 
     { 
      bluetapeList.Add(tape.Name); 
     } 
     OnPropertyChanged("BluetapeList"); 
    } 
    private void SaveAoiState() 
    { 
     Mouse.OverrideCursor = Cursors.Wait; 
     singOne = new SingOneTable(); 
     singOne.OverrideAoiState(selectedWafer, selectedBt, selectedAoiState); 
     Mouse.OverrideCursor = null; 
     MessageBox.Show(
      "The AOI state of " + selectedBt + " from " + selectedWafer + 
      " has been successfully changed to " + selectedAoiState + "!", 
      "AOI State Saved", MessageBoxButton.OK, MessageBoxImage.Exclamation); 
    } 
    public void SelectWafer() 
    { 
     Mouse.OverrideCursor = Cursors.Wait; 
     SelectedWafer = tvwWaferList.SelectedValue.ToString(); 
     PopulateBluetapeList(); 
     Mouse.OverrideCursor = null; 
    } 

    private void InitThread_DoWork(object sender, DoWorkEventArgs e) 
    { 
     if (!handled) 
     { 
      PopulateAoiStateList(); 
      tvwPresenter = new TreeViewPresenter(tvwWaferList, txtFilter, this); 
      tvwPresenter.WaferList = DataLibrary.GetWaferList(); 
      handled = true; 
     } 
    } 
    private void InitThread_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
     tvwPresenter.TreeView.DataContext = tvwPresenter.ProcessesAndWafers; 
     tvwPresenter.WaferListCache = tvwPresenter.ProcessesAndWafers; 
     tvwPresenter.ProcessArray = tvwPresenter.WaferListCache.ToArray(); 
     //TODO: Update Status text block 
    } 
} 
+0

建議:使用'DataBind()'方法(如果存在)。 – gunr2171 2013-05-08 17:06:45

+2

在您的XAML上設置ItemsSource =「{Binding Path = BluetapeList}」SelectedValue =「{Binding Path = SelectedBt}」並將DataContext設置爲此。 lbxTapeIn.DataContext = this;注:綁定後將項目添加到列表將不會顯示在ListBox中。可能是你應該嘗試ObservableCollection。 – Dilshod 2013-05-08 17:09:49

回答

0

回答(2日評論)由迪爾肖德:

的修復是改變我的List到ObservableCollectio ñ。

一旦我做了這個改變,一切都按預期工作;感謝Dilshod!

0

動態綁定WPF下拉控件(C#)。

我正在使用以下簡單的解決方案將WPF下拉框(組合框)以編程方式(C#)綁定到Dictionary對象。在該特定示例Dictionary包含國家與對應2位國家代碼(鍵)的列表:

清單1.字典對象包含W/2位國家代碼

Dictionary<string, string> _co = new Dictionary<string, string>(); 
_co.Add(String.Empty, String.Empty); 
_co.Add("US", "United States"); 
_co.Add("CA", "Canada"); 
_co.Add("MX", "Mexico"); 

清單2的國家名單。綁定下拉到詞典對象(WPF/C#)

// binding to country list Dictionary object (_co) 
_cmbCountry.ItemsSource = _co; 

// Country 2-digit Code used as a key 
_cmbCountry.SelectedValuePath = _dKey; 

// Country Name (string to display) 
_cmbCountry.DisplayMemberPath = _dValue; 

// first index selected 
_cmbCountry.SelectedIndex = 0; 

// DropDownClosed event subscription using Lambda notation 
_cmbCountry.DropDownClosed += (s, e) => ComboBox_Closed(s, e); 

的代碼片段(清單2.)上述的組合也顯示瞭如何使用「短切的lambda風格訂閱控制事件。希望這會有所幫助。問候,AB

PS。您也可以在我的文章中找到關於下拉控件綁定技術的更多信息:Binding DropDownList to various data structures in Microsoft ASP.NET