-1

文字列のリストをリスト ボックスの内容にバインドしようとしています。何らかの理由で、bluetape リストの結果が表示されますが、BluetapeList の内容がリスト ボックスに表示されません。どんな助けでも大歓迎です!

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
    }
}
4

2 に答える 2

0

Dilshod による回答 (2 番目のコメント):

修正は、リストを ObservableCollection に変更することでした。

その変更を行うと、すべてが期待どおりに機能しました。ありがとうディルショッド!

于 2013-05-08T17:24:46.293 に答える
0

WPF ドロップダウン コントロールを動的にバインドする (C#)。

WPFドロップダウン(コンボボックス)をDictionaryプログラム(C#)でオブジェクトにバインドするために、次の簡単なソリューションを使用しています。この特定の例Dictionaryには、対応する 2 桁の国コード (キー) を持つ国のリストが含まれています。

リスト 1. Dictionary オブジェクトには、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. ドロップダウンを Dictionary オブジェクトにバインドする (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。ドロップダウン コントロールのバインド手法の詳細については、私の記事「Microsoft ASP.NET で DropDownList をさまざまなデータ構造にバインドする」を参照してください。

于 2013-05-08T17:25:44.860 に答える