IEnumberableコレクションをコンボボックスにバインドしようとしています。問題は、ViewModelをインスタンス化する場所にあることを知っています...ビューのdatacontextはまったく異なるインスタンスであり、設定されているデータが表示されません。データをに渡す方法を知る必要があります。正しいインスタンス。私はWPFを初めて使用するため、この一部を完全に正しく説明していない可能性があります。以下は、私が関連していると思うコードです。他に何か見たい場合は、私に知らせてください。私は情報を提供するために最善を尽くします。どんな助けでもいただければ幸いです!私も常にヒントやコツを受け入れます!
コード:
XAML:
<telerik:RadComboBox x:Name="cboProviders" ItemsSource="{Binding Source=AddressProviders}" DisplayMemberPath="ProviderName" SelectedItem="{Binding SelectedAddressProvider, Mode=TwoWay}" Grid.Row="0" Grid.Column="1"/>
上記は私が現在使用しているバインディングです。そこにコレクションがあることはわかっていますが、設定されているデータは表示されません。
DataContext:
public EmailAddressWindow()
{
InitializeComponent();
this.DataContext = new EmailViewModel();
}
これはEmailViewModelに設定されます
EmailViewModel:
public IEnumerable<IEmailAddressesProvider> AddressProviders
{
get
{
return _AddressProviders;
}
set
{
_AddressProviders = value;
OnPropertyChanged("AddressProviders");
}
}
private string _SelectedAddressProvider;
public string SelectedAddressProvider
{
get
{
return _SelectedAddressProvider;
}
set
{
_SelectedAddressProvider = value;
OnPropertyChanged("SelectedAddressProvider");
}
}
インターフェイス(IEmailAddressesProvider):
public interface IEmailAddressesProvider
{
string ProviderName { get; }
IEnumerable<EmailAddress> GetEmailUsers();
}
}
ProviderNameが設定され、EmailUsersメソッドが定義されている場合(EmailAddressesProvider):
[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;
}
}
ViewModel(EmailService.cs)に設定されている場所
[ImportMany]
public IEnumerable<IEmailAddressesProvider> AddressProviders { get; set; }
EmailView ev = AllianceApp.Container.GetExportedValue<EmailView>();
ev.ViewModel.AddressProviders = this.AddressProviders;
ここでわかるように、使用されているビューはEmailViewです...ただし、コンボボックスがあるウィンドウのデータコンテキストで定義されているビューを使用する必要があります。情報を共有するために、どういうわけかクラスを接続する必要がありますか?もしそうなら、私は世界でどのようにそれをしますか。これは問題ではないかもしれませんが、私にとって理にかなっているのはそれだけです。私がコンピューターを投げる前に、あなたの一人がそれを理解できることを願っています。繰り返しになりますが、どんな助けでもありがたいです。