c# - Connect data in two classes for use in a View -
i trying bind ienumberable collection combobox. know problem instantiating viewmodel... datacontext of view totally different instance , not seeing info beingness set.i need know how need pass on info right instance. new wpf may not beingness explaining of right. below code find relevant. if want see else, allow me know , seek best provide information. help appreciated! take tips , tricks!
code:
xaml:
<telerik:radcombobox x:name="cboproviders" itemssource="{binding source=addressproviders}" displaymemberpath="providername" selecteditem="{binding selectedaddressprovider, mode=twoway}" grid.row="0" grid.column="1"/> above binding using. knows there collection there not show info beingness set.
datacontext:
public emailaddresswindow() { initializecomponent(); this.datacontext = new emailviewmodel(); } this set emailviewmodel
emailviewmodel:
public ienumerable<iemailaddressesprovider> addressproviders { { homecoming _addressproviders; } set { _addressproviders = value; onpropertychanged("addressproviders"); } } private string _selectedaddressprovider; public string selectedaddressprovider { { homecoming _selectedaddressprovider; } set { _selectedaddressprovider = value; onpropertychanged("selectedaddressprovider"); } } interface (iemailaddressesprovider):
public interface iemailaddressesprovider { string providername { get; } ienumerable<emailaddress> getemailusers(); } } where providername set , emailusers method defined (emailaddressesprovider):
[export(typeof(iemailaddressesprovider))] public class emailaddressprovider : iemailaddressesprovider { #region private properties private static readonly iencryptionservice encryptionservice = allianceapp.container.getexportedvalue<iencryptionservice>(); #endregion public string providername { { homecoming "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); homecoming addresslist; } } where is beingness set viewmodel (emailservice.cs)
[importmany] public ienumerable<iemailaddressesprovider> addressproviders { get; set; } emailview ev = allianceapp.container.getexportedvalue<emailview>(); ev.viewmodel.addressproviders = this.addressproviders; as can see here, view beingness used emailview... need using view defined in datacontext of window combobox is. need somehow connect classes share information. if so, how in world do that. might not problem, thing made sense me. 1 of can figure out before throw computer.. again, help appreciated.
consider using observablecollection binding, if have collection ienumerable can convert it,
observablecollection<t> obscoll = new observablecollection<t>(originalienumerable) observablecollection has constructor takes ienumerable parameter , makes shallow re-create of
c# wpf xaml binding collections
No comments:
Post a Comment