1

全て、

私は非常に基本的な概念に固執しています。本当に理解できる答えが見つかりません。

ビューがあります-viewContacts。そのデータ コンテキストは、viewmodel - viewmodelContacts です。

ビューには、「タイトル」のコンボボックスがあります(ご存知のとおり、Mr、Mrs、Missなど)。オプションのリストを表示するように itemssource をバインドし、viewmodelContacts TitleId プロパティにキーを格納するように SelectedValue をバインドします。

タイトルの場合の「ソース」リスト(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 に答える