2

我创建了一个DataGrid并以DataGridComboBoxColumn编程方式添加了一个。

public partial class MainWindow : Window
{

    private DataGridComboBoxColumn weightColumnChar = new DataGridComboBoxColumn();
    ObservableCollection<int> mComboBoxValues;
    public ObservableCollection<int> ComboBoxValues
    {
        get { return this.mComboBoxValues; }
        set { this.mComboBoxValues = value; }
    }//end property
    public MainWindow()
    {
        InitializeComponent();
        mComboBoxValues = new ObservableCollection<int>() {-1, 0, 1 };
    }//end constructor
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        weightColumnChar.Header = "Weight";
        dataGrid_Char.Columns.Add(weightColumnChar);

        weightColumnChar.ItemsSource = ComboBoxValues;
        Binding binding = new Binding();
        binding.Path = new PropertyPath(ComboBoxValues[1]);
        weightColumnChar.SelectedItemBinding = binding;
    }//end method
    private void dataGrid_Char_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {

    }//end method
    //Opens ComboBox on first click
    private void dataGrid_Char_GotFocus(object sender, RoutedEventArgs e)
    {
        if (e.OriginalSource.GetType() == typeof(DataGridCell))
        {
            DataGrid grd = (DataGrid)sender;
            grd.BeginEdit(e);
        }//end if
    }//end method
}//end class

我在其中添加了一个ItemsSource并从ObservableCollection.

集合中的值在运行时显示。

我的问题是,如果我从该值中选择一个值,ComboBox则不会选择并在之后显示。我究竟做错了什么?

而且我还想选择一个默认值。这是如何运作的?

请以编程方式而不是在 XAML 中解释!

如果有人可以帮助我,那就太好了。

谢谢!!!

4

1 回答 1

0

首先,您还没有显示绑定到 DataGrid 的基础集合是什么。

您将需要类似的东西DataGrid.ItemsSource = new ObservableCollection<MyClass>();(它必须是支持更改通知的集合,因此我选择了 ObservableCollection)。

其次,您将其绑定ComboBox.SelectedItemBindingComboBox.ItemsSource无意义的。ComboBox.ItemsSource是您可以选择的值的集合,ComboBox.SelectedItemBinding(我实际上会使用ComboBox.SelectedValueBinding)是包含/表示最终值的基础数据源的“路径”(例如MyClass.IntProperty)。因此,您从集合中选择一个值并将其分配给某个数据项(您不能将其分配回您从中选择的集合)。

PS!如果您稍后使用类似于 KeyValuePair 的东西(例如 Id; Name)作为您的ComboBox.ItemsSource,那么您设置ComboBox.SelectedValuePath = Id; ComboBox.DisplayMemberPath = Name;. 在这种情况下,MyClass.IntProperty将包含Id值。

于 2013-08-21T12:24:28.563 回答