2012-03-22 5 views
1

나는에 데이터 그리드에서의 selectedItem의 값을 결합해야 뷰 모델에에서 Datagrid의 selectedItem Multibinding

  • 속성 같은 페이지에서 콤보 상자의

    1. selectedItem가

    즉, 데이터 격자에서 행을 선택할 때 콤보 상자의 값이 변경되어야하며 위의 속성 값이 선택한 ite 값으로 설정되어야합니다 m입니다.

    나는이 같은 multibinding 사용하려고 :

    <DataGrid.SelectedItem> 
        <MultiBinding Converter="{StaticResource sapConverter}" > 
         <Binding Path="SelectedSap" Mode="TwoWay"/> 
         <Binding ElementName="cbSearchCompanyName" Path="SelectedItem" Mode="OneWay"/>          
        </MultiBinding> 
    </DataGrid.SelectedItem> 
    

    여기 SelectedSap 내가 업데이트 할 것을, 그 속성입니다. 그러나 변환기에서 values ​​()를 볼 때 SelectedSap에 해당하는 value (0)은 항상 Nothing이며 결과적으로 속성은 원하는대로 변경되지 않습니다. 콤보와 바인딩이 잘 작동합니다.

    나는 멀티 바인딩하지 않고 테스트하려고합니다. 내 말은, 나는 콤보에 신경 쓰지 않는다. 나는 단지 재산의 가치를 바꾸고있는 중이다. 좋아요 :

    <DataGrid.SelectedItem> 
         <Binding Path="SelectedSap" Mode="TwoWay"/> 
    </DataGrid.SelectedItem> 
    

    모두 정상적으로 작동합니다. 트릭은 어디에서 필요한 기능을 어떻게 구현해야합니까? 감사합니다.

  • +1

    직접 콤보 상자에 poperty의 SelectedSap 결합하지 왜? 그래서 datagrid 선택한 항목과 combox 선택한 항목은보기 모드와 동일한 속성에 바인딩됩니다. – Guillaume

    답변

    1

    h 많이 들었어! 두 답 모두 나에게 힌트를주었습니다. 실제로 저는 세 개의 컨트롤을 하나로 묶어야합니다 (기능 "검색 항목"을 상상해보십시오 - "item.X로 검색", "항목으로 검색", 항목이있는 데이터 격자). 그래서 내가 혼란스럽지 않고 멀티 바인드로 시작되었습니다. 그 일은 훨씬 쉬워졌습니다. 여기 내 코드는 지금의 작품 :

    <StackPanel Orientation="Horizontal" Grid.Row="0" >       
            <Label Content="Search company by name:"/> 
            <ComboBox MinWidth="200" Width="Auto" Name="cbSearchCompanyName" 
                ItemsSource="{Binding CompanyList,Mode=TwoWay}" 
                IsSynchronizedWithCurrentItem="True" 
                DisplayMemberPath="CompanyName1" 
                SelectedValuePath="Sap" 
               SelectedItem="{Binding Path=SelectedSap, Mode=TwoWay}" 
               SelectedValue="{Binding Path=SelectedSap.Sap, Mode=TwoWay}"/> 
    
            <Label Content="by SAP number:" /> 
            <ComboBox MinWidth="200" Width="Auto" Style="{StaticResource marginStyle}" Name="cbSearchCompanySap" 
                ItemsSource="{Binding CompanyList,Mode=TwoWay}"   
                IsSynchronizedWithCurrentItem="True" 
                DisplayMemberPath="Sap" 
                SelectedValuePath="Sap" 
               SelectedItem="{Binding Path=SelectedSap, Mode=TwoWay}" 
               SelectedValue="{Binding Path=SelectedSap.Sap, Mode=TwoWay}"/> 
    
           </StackPanel> 
    
           <ScrollViewer Grid.Row="1" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
            <DataGrid x:Name="CompanyList" AutoGenerateColumns="True" 
               ItemsSource="{Binding CompanyList,Mode=TwoWay}" 
               MaxWidth="950" Height="300" Margin="0 2 0 0">         
             <DataGrid.SelectedItem> 
              <Binding Path="SelectedSap" Mode="TwoWay"/> 
             </DataGrid.SelectedItem>        
            </DataGrid> 
           </ScrollViewer> 
    
    1

    아마도 바인딩이 잘못되었을 수 있습니다. 그리드에서 항목을 얻으면 ItemsSource가 좋습니다. SelectedValue를 사용하고 SelectedValuePath를 데이터에서 원하는 열로 설정하십시오.

    다중 바인딩을 건너 뛰고 콤보 상자의 바인딩을 DataGrid의 SelectedValue로 설정하도록 설정하십시오.

    <DataGrid Name="dgResults" ItemsSource="{Binding Path=DataGridObj}" 
    SelectedItem="{Binding SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
    SelectedValue="{Binding SelectedValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
    SelectedValuePath="ItemNoX" 
    
    1

    나는 당신의 목표를 달성하기위한 또 다른 좋은 방법이 생각 :

    <DataGrid Name="dgResults" ItemsSource="{Binding Path=DataGridObj}" 
    SelectedItem="{Binding SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>