2012-03-22 64 views
1

我需要從DataGrid中的SelectedItem的值綁定到:數據網格的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對應的值(0)始終爲Nothing,因此屬性不會根據需要更改。 與組合的綁定工作正常。

    我嘗試測試它沒有多重綁定。我的意思是,我不在乎組合,我只是在改變房產的價值。像這樣:

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

    一切工作正常。 訣竅在哪裏,我應該如何實現我需要的功能? 謝謝。

  • +1

    爲什麼沒有約束力直接ComboBox中poperty SelectedSap?因此datagrid選擇的項目和combox選定的項目將綁定在與視圖模式相同的屬性上 – Guillaume 2012-03-23 11:27:41

    回答

    1

    謝謝你很多!你的回答都給了我一個提示。其實我必須將三個控件綁定在一起(設想功能「搜索項目」 - 你有一個組合「搜索item.X」,組合「搜索item.Y」和一個數據網格與項目),這就是爲什麼我有點困惑和從多重綁定開始。事情要容易得多。這裏是我的代碼,現在工作:

    <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}"/>