1

全部,

我真的被一个非常基本的概念困住了——我只是找不到我真正理解的答案。

我有一个视图 - viewContacts。它的datacontext是一个viewmodel——viewmodelContacts。

在视图中,我有一个“标题”组合框(你知道......先生,夫人,小姐等)。我想绑定 itemssource 以便它显示选项列表,并绑定 SelectedValue 以便它将键存储在 viewmodelContacts TitleId 属性中。

如果标题(我想将 ItemsSource 绑定到)实际上位于单独的静态类中,则“源”列表 - 注意不是视图模型!

internal static class Titles
{
    static IList<Title> _colTitles = null;
    static Titles()
    {
        _colTitles = new List<Title>();
        _colTitles.Add(new Title() { TitleId = 1, Description = "Mr." });
        _colTitles.Add(new Title() { TitleId = 2, Description = "Mrs." });
        _colTitles.Add(new Title() { TitleId = 3, Description = "Miss." });
        _colTitles.Add(new Title() { TitleId = 4, Description = "Ms." });
    }

    internal static IList<Title> GetTitles()
    {
        return _colTitles;
    }
}

(当然,稍后这些东西将从数据库中获取)。

这个简单的任务超出了我作为 WPF 开发人员的才能。

如何将 ItemsSource 设置为这个静态类?如何进一步将 DisplayMemberPath 设置为基础 Title 对象的 Description 属性?

我应该将 SelectedValue 和 SelectedValuePath 设置为什么?

真的希望有人可以帮助我解决一个我无法解决的简单问题。

谢谢,格雷

4

3 回答 3

2

在您的 viewModel 中创建一个属性,如下所示:

public IList<Title> VmTitles
{
    get
    {
        return Titles.GetTitles();
    }
}

private Title _selectedTitle;
public Title SelectedTitle
{
    get
    {
        return _selectedTitle;
    }
    set
    {
        if (value != _selectedTitle)
        {
            _selectedTitle = value;
            OnPropertyChanged("SelectedTitle");
        }
    }
}

然后在您的 .xaml 中执行以下操作:

<ComboBox x:Name="cboTitle" ItemsSource="{Binding Path=VmTitles}" DisplayMemberPath="Description" SelectedItem="{Binding Path=SelectedTitle}" />
于 2012-05-30T15:41:05.013 回答
1
<ComboBox x:Name="cboTitle" SelectedValuePath="TitleId" DisplayValuePath="Description" SelectedValue="{Binding PropertyToBeUpdatedHere}"/>

然后在您的代码中设置组合框的项目源..

cboTitle.ItemsSource = Titles.GetTitles();
于 2012-05-30T15:16:12.093 回答
0

只需使用 ObjectDataProvider。

<UserControl.Resources>
    <ObjectDataProvider x:Key="cboSource" ObjectType="local:Titles" MethodName="GetTitles"/>
</UserControl.Resources>

    <ComboBox ItemsSource="{Binding Source={StaticResource cboSource}}">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Description}"/>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>

ps:您必须将内部静态更改为公共静态。

于 2012-05-31T06:39:52.970 回答