首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataGridComboBoxColumn不更新ItemsSource

DataGridComboBoxColumn不更新ItemsSource
EN

Stack Overflow用户
提问于 2016-07-18 07:48:10
回答 1查看 836关注 0票数 0

我有一个专栏:

代码语言:javascript
复制
<DataGridComboBoxColumn Header="Master" SelectedValueBinding="{Binding MasterId}" SelectedValuePath="Id" DisplayMemberPath="Name" ItemsSource="{Binding Data.Masters, Source={StaticResource proxy}}" />

ViewModel上的属性是:

代码语言:javascript
复制
public ObservableCollection<ReaderViewModel> Masters { get; set; }

DataGrid DataSource有一个自我关系主服务器,我在任何Insert/ update /Delete上更新集合,但是ComboBox保留初始值,而不更新自己。

我做错了什么?

对于属性的改变,我使用的是Fody副词。如果你需要更多的代码来理解这个问题,我准备分享更多。

编辑1:

BindingProxy类:

代码语言:javascript
复制
public class BindingProxy : Freezable
{
    #region Overrides of Freezable

    protected override Freezable CreateInstanceCore()
    {
        return new BindingProxy();
    }

    #endregion

    public object Data
    {
        get
        {
            return GetValue(DataProperty);
        }
        set
        {
            SetValue(DataProperty, value);
        }
    }

    public static readonly DependencyProperty DataProperty = DependencyProperty.Register("Data", typeof(object), typeof(BindingProxy), new UIPropertyMetadata(null));
}

这个类可以在Google上找到,我就是在那里找到的。

编辑2:

代码语言:javascript
复制
<DataGrid.Resources>
    <classes:BindingProxy x:Key="proxy" Data="{Binding}" />
</DataGrid.Resources>

如何使用BindingProxy。

EN

回答 1

Stack Overflow用户

发布于 2016-07-18 08:02:12

试试这个:

代码语言:javascript
复制
<DataGridComboBoxColumn Header="Master" SelectedValueBinding="{Binding MasterId}" SelectedValuePath="Id" DisplayMemberPath="Name" ItemsSource="{Binding Data.Masters, Source={StaticResource proxy, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}}" />

更新:

代码语言:javascript
复制
private ObservableCollection<ReaderViewModel> masters;
public ObservableCollection<ReaderViewModel> Masters
{ 
    get
    {
        return masters;
    }
    set
    {
        masters = value;
        OnPropertyChanged("Masters");
    }
}

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

XAML:

代码语言:javascript
复制
<DataGridComboBoxColumn Header="Master" Binding="{Binding Name}" SelectedValueBinding="{Binding MasterId}" SelectedValuePath="Id" ItemsSource="{Binding Masters, UpdateSourceTrigger=PropertyChanged}">
    <DataGridComboBoxColumn.Resources>
        <local:BindingProxy x:Key="proxy" Data="{Binding}"/>
    </DataGridComboBoxColumn.Resources>
</DataGridComboBoxColumn>
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38431209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档