在datagrid上导航时刷新组合框

时间:2016-08-14 09:13:33

标签: c# wpf combobox

请帮忙!

我在互联网上做了很多研究,但没有为我的问题找到任何解决方案。

我有食物的形式。表格上有一个网格,我可以在食物桌上导航。屏幕上有一个组合框(不在网格中),其中包含类别。组合框中填充了类别表中的类别。当我更改数据网格上的记录时,除了组合框之外,表格上更新了每个字段。

所以我的问题是:当我在网格上导航时,我需要做些什么来刷新组合框,以显示保存的类别? 在类别表中,该类别具有" id"田地和食物表中有一个" categoryid"字段。

我在xaml文件中有这个:

<ComboBox x:Name="categoryComboBox" Grid.Row="5" Grid.Column="1" Margin="3,4,20,0" Grid.ColumnSpan="3"
                  ItemsSource="{Binding Source={StaticResource categoryViewSource}}"
                  SelectedValuePath="CategoryId"
                  DisplayMemberPath="CatName"
                  SelectedItem="{Binding CategoryId, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                  Height="25" VerticalAlignment="Top">
            <ComboBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <VirtualizingStackPanel/>
                </ItemsPanelTemplate>
            </ComboBox.ItemsPanel>
        </ComboBox>

1 个答案:

答案 0 :(得分:0)

我可以看到你的代码中有一个小错误。我应该使用SelectedValue而不是SelectedItem。所以改变它,我认为它将正常工作。此外,您不需要像我之前建议的那样使用缩放方法。 这是一个例子:

<强> XAML

     <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" >
        <ComboBox x:Name="categoryComboBox" ItemsSource="{Binding Source={StaticResource categoryViewSource}}"
              SelectedValuePath="CategoryId"
              DisplayMemberPath="CatName"
              SelectedValue="{Binding CategoryId, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
              Height="25" VerticalAlignment="Top">
            <ComboBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <VirtualizingStackPanel/>
                </ItemsPanelTemplate>
            </ComboBox.ItemsPanel>
        </ComboBox>
        <Button Content="Change Category" Command="{Binding SelectionChangedCommand}"></Button>
    </StackPanel>

<强>的DataContext

public class MyComboDataContext:BaseObservableObject
{
    private int _categoryId;
    private ICommand _selectionChangedCommand;

    public MyComboDataContext()
    {
        CategoryId = 1;
    }

    public int CategoryId
    {
        get { return _categoryId; }
        set
        {
            _categoryId = value;
            OnPropertyChanged();
        }
    }


    public ICommand SelectionChangedCommand
    {
        get { return _selectionChangedCommand ?? (_selectionChangedCommand = new RelayCommand(SelectionChanger)); }
    }

    private void SelectionChanger()
    {
        CategoryId += 1;
        if (CategoryId == 4)
            CategoryId = 1;
    }
}

<强>说明:

首先,这是一个模拟组合更新的示例。这里,每次点击按钮时,组合框选择的值都会更改。在您的示例中,类别选择应该影响组合选择的值。因此,每次选择网格类别时,都应将选定的类别ID推送到组合SelectedValue绑定到的属性中。

为了帮助您,请通过以下方式更新您的问题:

  1. 输出窗口中是否存在任何Binding表达式错误?
  2. 如何处理代码中的DataGrid选择。
  3. 数据网格选择如何影响组合框SelectedValue(必须选择值)?
  4. 如果您需要更多帮助,请告诉我。如果我的回答有帮助,请随时将问题标记为已回答。