2016-07-18 6 views
0

を更新しない:DataGridComboBoxColumnは、私がこのコラムを持っているのItemsSource

<DataGridComboBoxColumn Header="Master" SelectedValueBinding="{Binding MasterId}" SelectedValuePath="Id" DisplayMemberPath="Name" ItemsSource="{Binding Data.Masters, Source={StaticResource proxy}}" /> 

をViewModelに上のプロパティは次のとおりです。

public ObservableCollection<ReaderViewModel> Masters { get; set; } 

DataGridのDataSourceが自己関係のマスター・スレーブを持っており、私がコレクションを更新します挿入、更新、削除は行われますが、コンボボックスは初期値を保持し、更新自体は行いません。

私は間違っていますか?

プロパティの変更については、Fodyアドオンを使用しています。 問題を理解するためのコードがさらに必要な場合は、もっと分かち合う準備が整いました。

EDIT 1:

BindingProxyクラス:

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)); 
} 

このクラスは、私はそれを見つけたグーグル、上で見つけることができます。

EDIT 2:BindingProxyが使用されているどのように

<DataGrid.Resources> 
    <classes:BindingProxy x:Key="proxy" Data="{Binding}" /> 
</DataGrid.Resources> 

+0

<DataGridComboBoxColumn Header="Master" SelectedValueBinding="{Binding MasterId}" SelectedValuePath="Id" DisplayMemberPath="Name" ItemsSource="{Binding Data.Masters, Source={StaticResource proxy, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}}" /> 

UPDATE:

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を動作しません)、またはコンボに値を設定すると、ビューモデルは変更に影響しません。 – CiccioRocca

+0

ComboBox ItemsソースはDataGridソースのサブセットですが、サブセット内にあるDataGridアイテム(作成、編集、または削除)を編集すると表示されません。 ComboBoxバインドは正常に動作します。 –

+0

これで、コンボボックスのItemSourceに何かが変更されたときに通知されません。モードを「OneWay」に設定しようとしましたか? – CiccioRocca

答えて

-1

このお試しください:comboboxcolumnが結合(任意の値を持っていない場合、私は理解していなかった

<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> 
+0

And:あなたのObservableCollectionクラスは、このようにINotifyPropertyChangedインターフェイスを実装する必要があります:https://msdn.microsoft.com/de-de/library/ms229614(v=vs.100).aspx - しかし、私はしませんFodyがコンパイル時に自動的に追加するかどうかを知っている。 – c0d3b34n

+1

誤った構文(間違って中括弧を配置)に加えて、ItemsSourceプロパティのバインドでMode = TwoWayとUpdateSourceTrigger = PropertyChangedを設定することは決して*決して*できません。 – Clemens

+0

Fodyアドオンは、私が知る限りUpdateSourceTriggerがうまく動作しなかった場合に、必要なところにそのコードを追加します。 ItemsSourceはまだ更新されていません –

関連する問題