2

バインドするコンボボックスがありますObservableCollection<CustomerViewModel>

<ComboBox ItemsSource="{Binding AllCustomers}" IsEditable="True"/>

DisplayMemberPath プロパティを使用すると、ドロップダウンと選択した項目が正しく表示されます

<ComboBox ItemsSource="{Binding AllCustomers}" DisplayMemberPath="CustomerName" IsEditable="True"/>

ここに画像の説明を入力

ただし、DataTemplate が割り当てられている場合、選択したアイテムは正しく表示されません

<ComboBox ItemsSource="{Binding AllCustomers}" SelectedValue="CustomerName" IsEditable="True">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding CustomerName}"/>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ComboBox>

ここに画像の説明を入力

編集: 問題は見つかりましたが、解決策は見つかりませんでした。問題は、ComboBox に IsEditable="True" がある場合に問題が発生することです。


コードの要約:

public class AllCustomersViewModel
{
   public ObservableCollection<CustomerViewModel> AllCustomers {get; set;}
}

public class CustomerViewModel
{
   public string CustomerName;
   public short CustomerID;
}

選択した値/項目を正しく表示するために、どのプロパティ (またはどのように) を設定するか。

事前にどうもありがとうございました。



実際のコード

public class AccountTransactionsViewModel
{
    DataRepository _repository;

    public AccountTransactionsViewModel()
    {
        _repository = new DataRepository();
        CreateAccountsViewModel();
    }

    public ObservableCollection<AccountViewModel> AllAccounts { get; set; }

    void CreateAccountsViewModel()
    {
        List<AccountViewModel> allAccounts = _repository.GetAccounts()
                                                        .Select(a => new AccountViewModel(a, _repository))
                                                        .ToList();

        AllAccounts =  new ObservableCollection<AccountViewModel>(allAccounts);            
    }
}



  public class AccountViewModel
  {
       Account _account;
       DataRepository _repository;

       public AccountViewModel(Account account, DataRepository repository)
       {
            _account = account;
            _repository = repository;
       }

       public short AccountID { get { return _account.AccountID; } set { } }
       public string AccountName { get { return _account.AccountName; } set { } }        
  }

XAML:

<ComboBox Name="customerCombobox" ItemsSource="{Binding AllAccounts}" IsEditable="True">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding AccountName}"/>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>                     
                    </ComboBox>

編集:

問題は見つかりましたが、解決策ではありません。問題は、ComboBox に IsEditable="True" がある場合に問題が発生することです。

4

4 に答える 4

3

利用可能なテンプレートがない場合、オブジェクトのタイプの完全な名前が表示されます。また、完全な型名はToString()メソッド呼び出しの結果です。そのため、メソッドをオーバーライドToString()するか、データ テンプレートについてさらに調査してください。

于 2012-09-14T08:42:30.140 に答える
0

試す

<ComboBox ItemsSource="{Binding AllCustomers}" SelectedValue="CustomerName">
        <ItemsControl.ItemTemplate>
             <DataTemplate>
                 <TextBlock Text="{Binding Item.CustomerName}"/>
             </DataTemplate>
        </ItemsControl.ItemTemplate>
</ComboBox>
于 2012-09-14T08:26:51.110 に答える
0

選択した値を表示したい場合は、いくつかのプロパティを使用する必要がありますSelectedValuePath。 表示するプロパティSelectedValueの値を保持します。SelectedItems

フレームワークを設定しないと、全体(この場合はインスタンス) を文字列に変換してSelectedValuePath戻そうとします。SelectedItemAccountViewModel

<ComboBox Name="customerCombobox" ItemsSource="{Binding AllAccounts}" SelectedValuePath="AccountName">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding AccountName}"/>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>                     
                </ComboBox>
于 2012-09-14T08:54:54.297 に答える