2014-03-07 41 views
0

我有一個綁定到項目源的數據網格。在數據網格中,我有一個組合框,其項目源位於視圖模型中。我已經爲來自數據網格的項目源的組合框設置了選定的項目,但它沒有被選中。組合框有項目,但沒有爲每一行選擇相應的項目。選擇的項目不是用於Datagrid內的組合框

<navigation:Page.Resources> 
    <VM:TransferStockroomGLViewModel x:Key="TransferStockroomGLViewModel" />   
</navigation:Page.Resources> 

<data:DataGrid x:Name="dgTransferStockroomGLDetails" AutoGenerateColumns="False" ColumnHeaderStyle="{StaticResource DataGridColumnHeaderStyle}" 
          VerticalScrollBarVisibility="Visible" ItemsSource="{Binding StockroomTransferDetails}" 
          CanUserResizeColumns="False" VerticalAlignment="Top" RowBackground="White" AlternatingRowBackground="White" GridLinesVisibility="All" Height="400"> 
      <data:DataGrid.Columns> 
       <data:DataGridTemplateColumn Header="From Stockroom" Width="200" CanUserReorder="True" CanUserSort="True" IsReadOnly="False"> 
        <data:DataGridTemplateColumn.HeaderStyle> 
         <Style TargetType="prim:DataGridColumnHeader"> 
          <Setter Property="HorizontalContentAlignment" Value="Center"/> 
          <Setter Property="FontWeight" Value="Bold"/> 
         </Style> 
        </data:DataGridTemplateColumn.HeaderStyle> 
        <data:DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <!--<TextBox Text="{Binding From_Stkrm_Id}" Width="200" Height="30" />--> 
          <ComboBox Width="200" Height="30" ItemsSource="{Binding Source={StaticResource TransferStockroomGLViewModel},Path=WiingsStkrmList}" 
             SelectedValuePath="From_Stkrm_Name" DisplayMemberPath="Name" /> 
         </DataTemplate> 
        </data:DataGridTemplateColumn.CellTemplate> 
       </data:DataGridTemplateColumn>     
      </data:DataGrid.Columns> 
     </data:DataGrid> 

視圖模型:

private ObservableCollection<BuyerWebService.Stockroom> wiingsStkrmList; 
    public ObservableCollection<BuyerWebService.Stockroom> WiingsStkrmList 
    { 
     get 
     { 
      return wiingsStkrmList; 
     } 
     set 
     { 
      wiingsStkrmList = value; 
      SendChangedNotification("WiingsStkrmList"); 
     } 
    } 

    private ObservableCollection<BuyerWebService.StockroomTransfer> stockroomTransferdetails; 
    public ObservableCollection<BuyerWebService.StockroomTransfer> StockroomTransferDetails 
    { 
     get 
     { 
      return stockroomTransferdetails; 
     } 
     set 
     { 
      stockroomTransferdetails = value; 
      SendChangedNotification("StockroomTransferDetails"); 
     } 
    } 

public TransferStockroomGLViewModel() 
    { 
     app = (App)Application.Current; 
     GetWiingsStockroomList(); 
     GetStockroomTransferGLDetails();   
    } 

    public void GetStockroomTransferGLDetails() 
    { 
     try 
     { 
      bsc.GetStockroomTransferGLDetailsCompleted += new EventHandler<BuyerWebService.GetStockroomTransferGLDetailsCompletedEventArgs>(bsc_GetStockroomTransferGLDetailsCompleted); 
      bsc.GetStockroomTransferGLDetailsAsync(app.LogonSiteID); 
     } 
     catch (Exception ex) 
     { 
      LogException.CatchException(ex); 
     } 
    } 

    void bsc_GetStockroomTransferGLDetailsCompleted(object sender, BuyerWebService.GetStockroomTransferGLDetailsCompletedEventArgs e) 
    { 
     try 
     { 
      if (e.Result != null) 
      { 
       StockroomTransferDetails = e.Result; 
      } 
     } 
     catch (Exception ex) 
     { 
      LogException.CatchException(ex); 
     } 
     finally 
     {     
      bsc.GetStockroomTransferGLDetailsCompleted -= new EventHandler<BuyerWebService.GetStockroomTransferGLDetailsCompletedEventArgs>(bsc_GetStockroomTransferGLDetailsCompleted); 
     } 
    } 

    public void GetWiingsStockroomList() 
    { 
     try 
     { 
      bsc.GetWiingsStockroomListCompleted += new EventHandler<BuyerWebService.GetWiingsStockroomListCompletedEventArgs>(bsc_GetWiingsStockroomListCompleted); 
      bsc.GetWiingsStockroomListAsync(app.LogonSiteID); 
     } 
     catch (Exception ex) 
     { 
      LogException.CatchException(ex); 
     } 
    } 

    void bsc_GetWiingsStockroomListCompleted(object sender, BuyerWebService.GetWiingsStockroomListCompletedEventArgs e) 
    { 
     try 
     { 
      if (e.Result != null) 
      {      
       WiingsStkrmList = e.Result; 
      } 
     } 
     catch (Exception ex) 
     { 
      LogException.CatchException(ex); 
     } 
     finally 
     { 
      bsc.GetWiingsStockroomListCompleted -= new EventHandler<BuyerWebService.GetWiingsStockroomListCompletedEventArgs>(bsc_GetWiingsStockroomListCompleted); 
     } 
    } 

我希望每個記錄的組合框應該有選擇的項目,但它不來了。

我到底做錯了什麼?

回答

1

它看起來像你期望SelectedValuePath來確定選定的值,但事實並非如此。財產SelectedValue將做到這一點。 SelectedValuePath確定如何在每個代表項目的組合框項目上找到屬性,並可用於檢查它是否與SelectedValue相同。

解決方案: 我假設你的類型BuyerWebService.Stockroom有一個字符串屬性Name。 這意味着你的綁定看起來像這樣:

<ComboBox 
    ItemsSource="{Binding Source={StaticResource TransferStockroomGLViewModel}, Path=WiingsStkrmList}" 
    SelectedValuePath="Name" 
    SelectedValue="{Binding From_Stkrm_Name, Mode=TwoWay}" 
    DisplayMemberPath="Name" 
    Width="200" Height="30"/> 
+0

這工作完美.... :) –