0

クラスコールアプリを持っています。AvailableTypesObservable collectionと呼ばれています。このAvailableTypes監視可能コレクションをwpfにバインドしたいと思います。フォームがロードされると、これらのAppIdがcomboBoxにロードされます。これに対する解決策を教えてください。ComboBox

class Apps: INotifyPropertyChanged{

    ServiceReference1.AssetManagerServiceClient client;
    ObservableCollection<string> availableType;
    public ObservableCollection<string> AvailableTypes
    {
        get
        {
            if (availableType == null)
            {
                availableType = new ObservableCollection<string>();

            }
            client = new ServiceReference1.AssetManagerServiceClient();
            List<string> AssestList = client.GetAppIds().ToList<string>();

            foreach (string appid in AssestList)
            {
                availableType.Add(appid);
            }
            return availableType;

        }
        set
        {
            availableType = value;
            NotifyPropertyChanged("AvailableTypes");

        }
    }


    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}
}
4

2 に答える 2

0

プロパティゲッター/セッターをオーバーロードしないでください。シンプルにします。

自動プロパティとNotifyPropertyWeaverを使用するか、PostSharpビルド後のコンパイル時に挿入された命令を使用してINotifyPropertyChangedインターフェイスをサポートすることをお勧めします。

これにより、ビューモデルが読みやすくなり、管理/理解しやすくなります。

SLのフォーム「Loaded」イベントまたは「NavigatedTo」では、任意の場所からデータのロードを開始し、ロードが完了した後に対応するプロパティを設定できます(コールバック/イベントハンドラーでは、バインドされたプロパティを更新するときにUIディスパッチャーを使用することを忘れないでください)

于 2013-03-05T08:48:51.603 に答える
0

xamlコードでは、これはコンボボックスにバインドする方法の簡単な例です。

<ComboBox ItemsSource={Binding Path=AvailableTypes} />

また、ビューモデルをウィンドウのDataContextにもロードする必要があります。

var window = new MainWindow
{
    DataContext = new Apps()
};
window.Show();

アプリの起動時にウィンドウを開きたい場合は、代わりにこれを行うことができます

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);


        var window = new MainWindow
        {
            DataContext = new Apps()
        };

        window.Show();
    }
}
于 2013-03-05T11:04:03.623 に答える