2012-03-22 5 views
1
私はデータグリッドからのSelectedItemの値をバインドする必要があり

へ:データグリッドのSelectedItem多

  1. 同じページ上のコンボボックスのSelectedItemの

  2. プロパティのviewmodel

つまり、データグリッド内の行を選択すると、コンボボックス内の値が変更され、上記のプロパティの値も選択されたiteの値に設定されますmのデータグリッド。

私はこのような多使用しようとした:

<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であり、その結果、プロパティは私の望むとおりに変更されません。 コンボとのバインディングは正常に動作します。

私はマルチバインディングなしでテストしようとしています。私はコンボについて気にしない、私はただプロパティの価値を変更しているということです。このように:

すべて正常です。 トリックはどこにあり、必要な機能をどのように実装する必要がありますか? ありがとうございます。

+1

直接コンボボックスにpopertyのSelectedSapを結合しないのはなぜ?そのため、選択されたアイテムのデータグリッドと選択されたアイテムのcomboxは、ビューモードと同じプロパティにバインドされます – Guillaume

答えて

1

Таanku a lot!両方の答えが私にヒントを与えました。実際には、3つのコントロールを結合する必要があります(機能 "検索アイテム"を想像してください - あなたはコンボ "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}"/>