0

我有课堂通话应用程序。它Observable collection调用了AvailableTypes。我想将此 AvailableTypes 可观察集合绑定到 wpf ComboBox。加载表单时,这些 AppId 应该加载到组合框中。你能给我一个解决方案吗?

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

在您的 xaml 代码中,这是一个如何绑定到组合框的简单示例。

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

您还需要将视图模型加载到窗口的 DataContext 中。

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

如果你想在 App 启动时打开窗口,你可以这样做

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 回答
0

不要重载属性获取器/设置器。让它更简单。

我建议使用自动属性和NotifyPropertyWeaver或使用PostSharp构建后编译时注入指令来支持 INotifyPropertyChanged 接口。

这使您的视图模型更具可读性和易于管理/理解。

在 SL 中的“Loaded”事件或“NavigatedTo”表单中,您可以开始从您想要的任何位置加载数据并在加载完成后设置相应的属性(在回调/事件处理程序中,不要忘记在更新绑定属性时使用 UI 调度程序)

于 2013-03-05T08:48:51.603 回答