2017-05-21 1 views
0

내 PowerGrid 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 개체의 '위치'필드 내에 정의 된 항목이어야한다는 것입니다. 내가 잘못하고 있어요 무엇인지 확실하지거야

enter image description here

:

은 무슨 일이 일어나고 있는지의 고장이다. 어떤 도움이라도 대단히 감사 할 것입니다.

Object being added as Itemssource

답변

0

당신은 DisplayMemberPath 및 selectedItem가 바인딩을 정의해야합니다. 좀 더 많은 코드를 제공했다면 정확히 어떻게 보이는지를 보여줄 수있었습니다. 다음은 내 코드의 예제입니다.

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

안녕하세요. 답장을 보내 주셔서 감사합니다. 'DisplayMemberPath'가 정확히 무엇으로 설정되었는지에 대해 알려주시겠습니까? 위에서 객체가 Datagrid에 적용되는 방법을 간략하게 설명하는 PS 코드를 편집했습니다. 더 이상 코드가 필요하면 알려주세요. 임이 필사적 으로이 일을! – Haliax

+0

내 예제에서 Symbol은 제 경우 인 ItemsSource 인 DataTable의 열 이름입니다. 모든 것은 콤보 박스의 ItemsSource 구성에 달려 있습니다.나는 이것이 단순히 정수의 목록 인 것 같아서 이것을 버릴 수 있습니다. – AQuirky

+0

예, itemsource는 1-10의 정수를 포함하는 열입니다. 다음 콤보 상자의 선택한 값을 원하는 단일 정수가 포함 된 두 번째 열이 있습니다. 바인드 작업에서 콤보 상자의 정수 중 하나를 선택하면 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); 

그래서 당신에 대해이 예제를 비교, 문제가 selectedItem가 대 SelectedValue 아마도 것 같다 ... 이는 데이터 그리드가 결합되어있는 BLE.

바운드 데이터의 구조에 대해 더 알지 못하면 문제를 해결하기가 매우 어렵습니다.

관련 문제