2013-05-04 47 views
1

我是編程初學者,尤其是WPF。我在WPF有一個應用程序。我已將的.sdf數據庫連接更改爲SqlCeCommand。不幸的是,在此之前,我有以下代碼綁定ComboBox將數據綁定到WPF中的組合框

<DockPanel Grid.Row="4"> 
    <Button x:Name="LoadButton" Height="20" ToolTip="Choose setting name to load" Width="75" Padding="2,2,2,2" Margin="2,0,2,0" HorizontalAlignment="Left" VerticalAlignment="Center" Content="Load Settings" Command="{Binding LoadSettingsCommand}"/> 

    <ComboBox x:Name="LoadSettingsComboBox" ToolTip="Choose setting name to load" ItemsSource="{Binding Mode=OneWay, Path=Settings/}" SelectedValue="{Binding LoadSettingName, Mode=OneWayToSource}" SelectedValuePath="Name" Grid.Column="1" > 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <TextBlock HorizontalAlignment="Center" Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
    </ComboBox> 
</DockPanel> 

和:

List<Setting> _settings; 
Settings = new CollectionView(_settings); 

和它的工作。將連接更改爲DataBase後沒有錯誤,但ComboBox未顯示任何數據。 Setting類之前由實體框架生成。現在,我創建了自己的課程設置。這個班應該實施什麼?你可以幫我嗎?

回答

1

如果您覺得這有幫助,請給出答案。

根據我的理解,如果您使用設置作爲數據對象,您需要將其存儲到ObservableCollection中。使用這樣的:

private ObservableCollection<Settings> _settingList = new ObservableCollection<Settings>(); 
    public ObservableCollection<Settings> SettingList 
    { 
     get 
     { 
      return this._settingList; 
     } 
     set 
     { 
      if(value==null) 
      return; 
      this._settingList = value; 
      //OnPropertyChanged(()=>this.SettingList); //It is not required as ObservableCollection<> itself notifies on collection changed. 
     } 
    } 

如果要實現自己的設置類,那麼你應該實現INotifyPropertyChanged接口綁定與組合框項屬性。下面是供您參考代碼:

public class SettingsModel : INotifyPropertyChanged 
{ 
    #region INotifyPropertyChanded event Implementation 

    public event PropertyChangedEventHandler PropertyChanged; 

    public void OnPropertyChanged<TProperty>(Expression<Func<TProperty>> propertyExpression) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 

     if (null == handler) 
      return; 

     if (null != propertyExpression) 
     { 
      var e = new PropertyChangedEventArgs(((MemberExpression)propertyExpression.Body).Member.Name); 
      handler(this, e); 
     } 
    } 

    public void OnPropertyChanged(string propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 

     if (null != PropertyChanged) 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 
    #endregion 
} 

上面的實現爲您提供了一個的方法OnPropertyChanged(字符串propertyName的)。您需要在您班級中每個屬性的「設置」部分調用此方法。每當屬性值發生變化時,它都會通知控制權的DependencyProperty。

希望這會幫助你。