2014-11-23 93 views
0

我即將放棄。我一直在試圖將DataGridComboBoxColumn綁定到DataGrid的DataContext(一個DataSet),但我不能。代碼如下所示:DataGridComboBoxColumn綁定到DataGrid DataContext

用戶控件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:

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

所以我都希望是我DataGridComboBoxColumn綁定到我的數據集:

<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> 

用戶完成編輯後,我將使用數據上傳到我的數據庫。此外,所選項目不顯示在DataGrid單元格中。

任何幫助將非常感激。

回答

0

您沒有設置的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> 
相關問題