DataGridComboBoxColumn привязка к DataGrid DataContext

Я собираюсь сдаться. Я пытался привязать этот DataGridComboBoxColumn к DataGrid DataContext (DataSet), но я просто не могу. Код выглядит так:

UserControl C #:

private static String strDBPath = EMS.Properties.Settings.Default.DBFile;
private static OleDbConnection myConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strDBPath + ";Jet OLEDB:Engine Type=5");
private static string strProp = "SELECT * FROM tblProperties";
private static OleDbDataAdapter adapterProp = new OleDbDataAdapter(strProp, myConn);
private static DataSet dsProp = new DataSet();
public ObservableCollection<string> VarTypes { get; set; }

public UserControlPropertiesAccess() {
     VarTypes = new ObservableCollection<string>() { "N", "Bool", "A2", "A4", "A8", "A20", "A50", "A100", "A200", };

     InitializeComponent();
     DatabaseHandling.CreateTable("tblProperties");
     adapterProp.Fill(dsProp, "LoadDataBindingProp");
     dgProperties.DataContext = dsProp;
}

В dsProp у меня есть следующие поля: PropID, PropName, PropVarType и PropUnit. Я использую привязку для отображения последних трех полей в других столбцах DataGrid, и все работает нормально. Когда я пытаюсь использовать DataGridComboBoxColumn, он просто не привязывается к DataContext. Мне удалось использовать только ObservableCollection в качестве элементов поля со списком.

XAML:

    <DataGrid Name="dgProperties" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="LightCyan" Style="{StaticResource AzureDataGrid}" AutoGenerateColumns="False" CanUserAddRows="False" SelectionMode="Single" ItemsSource="{Binding Path=LoadDataBindingProp}" IsReadOnly="True" SelectionChanged="dgProperties_SelectionChanged">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=PropName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Header="Property" Width="150" />
            <DataGridComboBoxColumn x:Name="dgcmbProperties" SelectedItemBinding="{Binding Path=PropName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Header="Variable" Width="80" />
             <DataGridTextColumn Binding="{Binding Path=PropUnit, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Header="Unit" Width="100" />
        </DataGrid.Columns>
    </DataGrid>

После того, как пользователь закончит редактирование, я загружаю данные в свою базу данных, используя:

    private void btnSaveProperty_Click(object sender, RoutedEventArgs e)
    {
        myConn.Open();
        adapterProp.Update(dsProp.Tables[0]);
        myConn.Close();
    }

Итак, я все хочу привязать свой DataGridComboBoxColumn к моему DataSet. Кроме того, выбранный элемент не отображается в ячейке DataGrid.

Мы будем очень благодарны за любую помощь.


person Rodrigo Capel Pasqua    schedule 23.11.2014    source источник


Ответы (1)


Вы не установили ItemsSource для DataGridComboBoxColumn

Я полагаю, что ваша основная модель представления (DataContext главного окна) имеет коллекцию, содержащую все элементы поля со списком (например, MyComboItems)

Тогда это должно сработать:

<Window x:Name="root">
    <DataGrid ItemsSource="{Binding Path=LoadDataBindingProp}">
        <DataGrid.Columns>
            <DataGridComboBoxColumn x:Name="dgcmbProperties" Header="Variable"
                  ItemsSource="{Binding 
                      ElementName=root, 
                      Path=DataContext.MyComboItems}"
                  SelectedItemBinding="{Binding 
                      Path=PropName, 
                      Mode=TwoWay, 
                      UpdateSourceTrigger=PropertyChanged}"/>
        </DataGrid.Columns>
    </DataGrid>
</Window>
person Bizhan    schedule 23.11.2014