ViewModel のコレクションの結果をコンボボックスにバインドしようとしています。以下は私のコードです。どんな助けでも大歓迎です。何か他のものを見る必要がある場合、またはより多くの情報が必要な場合は、お知らせください。
XAML:
DataContext="clr-namespace:Alliance.Library.Email.EmailViewModel"
<ComboBox x:Name="cboProviders" ItemsSource="{Binding Source=AddressProviders}" DisplayMemberPath="ProviderName" Grid.Row="0" Grid.Column="1"></ComboBox>
それが私のコンボボックスです。そのためのコードが完全に間違っていることは認識していますが、私は新しいので、試行錯誤してアプローチしようとしていました.
コード:
これは私の VeiwModel "EmailViewModel.cs" にあります。
public IEnumerable<IEmailAddressesProvider> AddressProviders { get; set; }
これは私のインターフェース「IEmailAddressesProvider」です:
public interface IEmailAddressesProvider
{
string ProviderName { get; }
IEnumerable<EmailAddress> GetEmailUsers();
}
}
GetEmailUsers() を含む "EmailAddressProviders.cs" のコード:
[Export(typeof(IEmailAddressesProvider))]
public class EmailAddressProvider : IEmailAddressesProvider
{
#region Private Properties
private static readonly IEncryptionService encryptionService = AllianceApp.Container.GetExportedValue<IEncryptionService>();
#endregion
public string ProviderName
{
get { return "Alliance Users"; }
}
public IEnumerable<EmailAddress> GetEmailUsers()
{
IUserRepository userRepo = AllianceApp.Container.GetExportedValue<IUserRepository>();
IEnumerable<User> users = userRepo.GetAllUsers().Where(a => a.IsDeleted == false).OrderBy(a => a.UserID).AsEnumerable();
List<EmailAddress> AddressList = new List<EmailAddress>();
foreach (var user in users)
{
if (user.DisplayName != null && user.EmailAddress != null && user.DisplayName != string.Empty && user.EmailAddress != string.Empty)
AddressList.Add(new EmailAddress() { DisplayName = encryptionService.DecryptString(user.DisplayName), Email = encryptionService.DecryptString(user.EmailAddress) });
}
AddressList.OrderBy(u => u.DisplayName);
return AddressList;
}
}
これらの値がどのように設定されているかについて、私は MEF を使用しています。私は「魔法」と呼んでいます。私はこのメールの部分を書きませんでした。コンボボックス内の要素を取得しようとしています。再度、感謝します!