How to update a data bound combobox when the source data changes?

我与影子孤独终老i 提交于 2019-12-07 09:44:07

问题


I'm working on a C# Metro style app for Windows 8, and I'm having a problem getting my data bound combo box to update when the source data changes.

Here's the data source:

public class Range
{
    public string range_name { get; set; }
    public string range_description { get; set; }
    public int min { get; set; }
    public int max { get; set; }
}

static List<Range> ranges = new List<Range>
{
    new Range { range_name = "Foo", range_description = "Foo: (0-10)", min = 0, max = 10},
    new Range { range_name = "Bar", range_description = "Bar: (5-15)", min = 5, max = 15},
    new Range { range_name = "Baz", range_description = "Baz: (10-20)", min = 10, max = 20},
    new Range { range_name = "Custom", range_description = "Custom: (0-20)", min = 0, max = 20}
};

And the combo box:

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <ComboBox Name="combo_range" ItemsSource="{Binding Path=Range}" DisplayMemberPath="range_description" SelectedValuePath="range_name" SelectedValue="{Binding Path=Range}" SelectionChanged="combo_range_SelectionChanged"/>
</Grid>

The user can manipulate the min/max range range of the 'custom' range in the app, but the combo box only updates when I change away from that record and then change back to 'custom'.

What do I need to do to force the combo box to update in real time when the source data changes?

Thanks


回答1:


Try implementing INotifyPropertyChanged in your Range class:

public class Range : INotifyPropertyChanged
{
    // Declare the event
    public event PropertyChangedEventHandler PropertyChanged;
    private string _range_name;
    private string _range_description;
    private int _min;
    private int _max;

    public string range_name
    {
        get { return this._range_name; }
        set
        {
            _range_name = value;
            OnPropertyChanged("range_name");  
        }  // Call OnPropertyChanged whenever the property is updated
    }
    public string range_description
    {
        get { return this._range_description; }
        set
        {
            _range_description = value;
            OnPropertyChanged("range_description");
        }
    }
    public int min
    {
        get { return this._min; }
        set
        {
            _min=value;
            OnPropertyChanged("min");
        }
    }
    public int max
    {
        get { return this._max; }
        set
        {
            _max = value;
            OnPropertyChanged("max");
        }
    }

    // Create the OnPropertyChanged method to raise the event
    protected void OnPropertyChanged(string name)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
    }
}

Hope it helps ;)



来源:https://stackoverflow.com/questions/11706241/how-to-update-a-data-bound-combobox-when-the-source-data-changes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!