【问题标题】:Selected Item not coming for ComboBox inside DatagridDatagrid 中的 ComboBox 未选择项目
【发布时间】:2014-03-07 01:40:10
【问题描述】:

我有一个绑定到项目源的数据网格。在数据网格内部,我有一个组合框,其项目源位于视图模型中。我已经为来自数据网格的项目源的组合框设置了选定的项目,但它没有被选中。组合框有项目,但没有为每一行选择相应的项目。

<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);
        }
    }

我希望对于每条记录,组合框都应该有选定的项目,但它没有出现。

我做错了什么?

【问题讨论】:

    标签: silverlight xaml mvvm


    【解决方案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"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2015-09-28
      • 1970-01-01
      相关资源
      最近更新 更多