我正在尝试将 IEnumberable 集合绑定到组合框。我知道问题在于我在哪里实例化我的 ViewModel...我的视图的数据上下文是一个完全不同的实例,没有看到正在设置的数据。我需要知道我需要如何将数据传递给正确的例子。我是 WPF 的新手,所以我可能无法完全正确地解释其中的一些内容。以下是我认为相关的代码。如果您想查看其他内容,请告诉我,我会尽力提供信息。任何帮助,将不胜感激!我也将永远接受提示和技巧!
代码:
XAML:
<telerik:RadComboBox x:Name="cboProviders" ItemsSource="{Binding Source=AddressProviders}" DisplayMemberPath="ProviderName" SelectedItem="{Binding SelectedAddressProvider, Mode=TwoWay}" Grid.Row="0" Grid.Column="1"/>
以上是我目前使用的绑定。它知道那里有一个集合,但它不显示正在设置的数据。
数据上下文:
public EmailAddressWindow()
{
InitializeComponent();
this.DataContext = new 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 ... 但是我需要使用组合框所在窗口的数据上下文中定义的视图。我是否需要以某种方式连接类以共享信息。如果是这样,我到底是怎么做到的。这甚至可能不是问题,但它是唯一对我有意义的事情。希望你们中的一个人能在我扔掉我的电脑之前弄清楚。再次感谢任何帮助。