簡體   English   中英

當選擇項目時,ComboBox ItemSourceProperty失去綁定

[英]ComboBox ItemSourceProperty losts binding when item selected

我在這個大型項目上花了幾個小時,因此我舉了一個簡單的例子。 問題是,當您按下“添加”按鈕時,它會將數字添加到ComboBox項源屬性中。 我肯定錯過了什么。

XAML:

....
<Grid>
    <ComboBox x:Name="comboBox" HorizontalAlignment="Left" Margin="82,63,0,0" 
               VerticalAlignment="Top" Width="120"/>
    <Button x:Name="AddButton" Content="Add" HorizontalAlignment="Left" 
             Margin="82,143,0,0" VerticalAlignment="Top" Width="75" 
             Click="NewNumberClick"/>
</Grid>
...

C#代碼:

namespace ComboBoxBinding
{
public partial class MainWindow : Window, INotifyPropertyChanged
{
    private List<double> _numbers;
    Binding comboBoxBinding;
    public List<double> Numbers
    {
        get
        {
            return _numbers;
        }
        set
        {
            _numbers = value;
            OnPropertyChanged("Numbers");
        }
    }

    public MainWindow()
    {
        InitializeComponent();
        Numbers = new List<double>(){ 1.0, 2.0, 3.0};

        comboBoxBinding = new Binding();
        comboBoxBinding.Path = new PropertyPath("Numbers");
        comboBoxBinding.Mode = BindingMode.TwoWay;
        BindingOperations.SetBinding(comboBox, ComboBox.ItemsSourceProperty, comboBoxBinding);

        DataContext = this;
    }

    private void NewNumberClick(object sender, RoutedEventArgs e)
    {
        Random rand = new Random(); 
        double newNumber = 2.0 - rand.NextDouble(); 
        Numbers.Add(newNumber);
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName = null)
    {
        if (PropertyChanged != null)
            PropertyChanged.Invoke(this, new 
    PropertyChangedEventArgs(propertyName));
    }
  }
}

使用ObservableCollection而不是List。 當列表中的內容發生更改時,列表不提供通知。

ObservableCollection是一個集合,它使集合外部的代碼可以知道何時發生對集合的更改(添加,移動,刪除)。 它在WPF和Silverlight中大量使用,但不僅限於此。 代碼可以添加事件處理程序以查看集合何時更改,然后通過事件處理程序做出反應以進行一些其他處理。 這可能是更改UI或執行其他操作。

請參閱: .net中ObservableCollection的用途是什么?

您的來源是List ,它不會通知UI有關成員更新的信息。 你可以使用ObservableCollection代替或致電OnPropertyChanged你做后各一次.Add

更重要的是,您應該使用真實的DataContext而不是UI類,並且應該在xaml中進行綁定,而不是在后面的代碼中進行綁定

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM