2017-05-21 26 views
0

私のDatagrid ComboBox選択項目をPowerShellオブジェクトに正しくバインドするのに問題があります。私は 'UpdateSourceTrigger = PropertyChanged'パラメータでComboBoxの双方向バインディングを使用しています。ソースオブジェクトはComboBoxに項目として正しく追加され、選択が変更されるとソースオブジェクトが更新されます。ただし、オブジェクトを保存したり、最初に起動したりすると、選択した項目がバインドされません。代わりに、すべてのComboBoxが選択された値を持たないとして生成されます。WPF Datagrid Combobox SelectedItemがPowershellオブジェクトに正しくバインドされていません

XAML:

  <DataGrid Name="CustomDescription_Fields_DG" HorizontalAlignment="Left" Width="626" Margin="185,113,0,87" IsReadOnly="True" AutoGenerateColumns="False" GridLinesVisibility="None" AlternatingRowBackground="#FFEFEFF2" > 
      <DataGrid.Columns> 
       <DataGridTextColumn Binding="{Binding Field}" Header="Applied Fields" Width="395"/> 
       <DataGridTemplateColumn Header="Position" Visibility="Visible" Width="60"> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <ComboBox SelectedItem="{Binding Path=Position, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding ItemCount}"/> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
      </DataGrid.Columns> 
      <DataGrid.CellStyle> 
       <Style TargetType="{x:Type DataGridCell}"> 
        <Style.Triggers> 
         <Trigger Property="DataGridCell.IsSelected" Value="True"> 
          <Setter Property="BorderBrush"> 
           <Setter.Value> 
            <SolidColorBrush Color="Transparent"/> 
           </Setter.Value> 
          </Setter> 
          <Setter Property="Foreground" 
         Value="{DynamicResource 
           {x:Static SystemColors.ControlTextBrushKey}}"/> 
          <Setter Property="Background"> 
           <Setter.Value> 
            <SolidColorBrush Color="Transparent"/> 
           </Setter.Value> 
          </Setter> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 
      </DataGrid.CellStyle> 
     </DataGrid> 

WPFアプリケーションが起動:

をあなたは、アプリケーションがコンボボックスの項目が正しくのItemsSourceオブジェクトの「ITEMCOUNT個」フィールドにバインドされていることを起動したときにことがわかります。何が起こるか(または達成しようとしているのは少なくとも)、選択されたアイテムは、ItemsSourceオブジェクトの 'Position'フィールド内で定義されたアイテムでなければなりません。

これは何が起こっているかの内訳です:

enter image description here

私は私が間違っているのかわからないようです。どんな助けも非常に高く評価されるでしょう。あなたが結合DisplayMemberPathとのSelectedItemを定義する必要があり

Object being added as Itemssource

答えて

0

。さらにコードを提供していれば、私はそれがどのように見えるかを正確に示しているはずです。ここに私のコードの例があります...

<ComboBox ItemsSource="{Binding Units}" DisplayMemberPath="Symbol" SelectedItem="{Binding SelectedToUnit}" /> 
+0

こんにちは、返信ありがとうございます。 「DisplayMemberPath」が正確に何に設定されているかについて、少し光を当ててください。上記の私は、オブジェクトがDatagridにどのように適用されているかを概説したPSコードを元の投稿に編集しました。それ以上のコードが必要な場合は、私に知らせてください。私はこれを解決するために必死です! – Haliax

+0

私の例では、Symbolは、私の場合はItemsSourceであるDataTableの列の名前です。すべてがコンボボックスのItemsSourceの構成に依存します。あなたのケースでは、これは単なる整数のリストだと思うので、このままにしておいてください。 – AQuirky

+0

はい、私のitemsourceは1〜10の整数を含む列です。次に、私はコンボボックスの選択値にしたい単一の整数を含む2番目の列を持っています。バインディングは、コンボボックスから整数の1つを選択すると、itemsourceオブジェクトが正しく更新されますが、データグリッドが更新されると、選択項目が表示されなくなります。 – Haliax

0

ここでは、テンプレートのデータグリッド列を使用してより完全な例を作成しました。

  <DataGridTemplateColumn Header="Declared"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <ComboBox SelectedValue="{Binding DummyColumn}" DisplayMemberPath="Name" SelectedValuePath="Number" 
            ItemsSource="{Binding DataContext.DummyCollection, Source={x:Reference dummyElement}}"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

私は右のデータコンテキストを取得するためにダミーの要素への参照を必要とする...ここの背後にあるコードで

<FrameworkElement x:Name="dummyElement" Visibility="Collapsed"/> 

は私のデータクラスとコレクション

public class DummyClass 
    { 
     public int Number { get; set; } 
     public string Name { get; set; } 
    } 

..です。

 DummyClassCollection = new ObservableCollection<DummyClass>(); 

     DummyClassCollection.Add(new DummyClass() { Name = "Item1", Number = 0 }); 
     DummyClassCollection.Add(new DummyClass() { Name = "Item2", Number = 1 }); 
     DummyClassCollection.Add(new DummyClass() { Name = "Item3", Number = 2 }); 

データTA ...

 DataTable table = new DataTable(); 
     table.Columns.Add("DummyColumn", typeof(int)); 
     table.Columns.Add("Bool", typeof(bool)); 
     table.Rows.Add(1,true); 
     table.Rows.Add(2,false); 

だからあなたに対してこの例を比較したデータグリッドがバインドされているBLE、問題はのSelectedItem対SelectedValueのあることかもしれないようです。

また、バインドされたデータの構造について詳しく知ることなく、問題を解決することは非常に難しいです。

関連する問題