1

私はプログラミングの初心者ですWPF。に申し込みがありますWPF.sdfデータベースへの接続を からEntity Frameworkに変更しましたSqlCeCommand。残念ながら、これより前に、 a をバインドするための次のコードがありましたComboBox

<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ませんが、データは表示されません。エンティティ フレームワークによって設定クラスが生成される前。今、私は自分のクラス設定を作りました。このクラスは何を実装する必要がありますか? 手伝って頂けますか?

4

1 に答える 1

1

役に立った場合は、この回答に投票してください。

私の理解によると、Setting をデータ オブジェクトとして使用している場合は、それを 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.
        }
    }

独自の Setting クラスを実装する場合は、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(string propertyName) が提供されます。クラスの各プロパティの「設定」セクションでこのメソッドを呼び出す必要があります。プロパティ値が変更されるたびに、コントロールの DependencyProperty に通知されます。

これがあなたを助けることを願っています。

于 2013-05-04T12:29:39.353 に答える