我有一个组合框,当用户从存储在我的ViewModelMain类中的变量中的数据中选择它时,我需要填充它,但不能使它工作。
我的ViewModel看起来像这样,GetMessagesTypes()方法是我感兴趣的方法.messageType变量返回一个MessageTypes列表,我需要将它绑定到我的组合框。
任何指针都将不胜感激。
namespace Toolbox.ViewModel
{
[ImplementPropertyChanged]
internal class ViewModelMain
{
#region Fields
private readonly IActionLogRepository m_ActionLogRepository;
#endregion
#region Properties
public DateTime QueryFromDate { get; set; }
public DateTime QueryToDate { get; set; }
public int TopXRecords { get; set; }
public ICommand SearchTopXRecord { get; private set; }
public ICommand GetListOfmessageTypes { get; set; }
public ICommand SearchDateCommand { get; private set; }
public object SelectedMessageBody { get; set; }
public ObservableCollection<IActionLog> Messages { get; set; }
#endregion
#region Constructor
//Should use injection container
public ViewModelMain(IActionLogRepository actionLogRepository)
{
QueryToDate = DateTime.Now;
QueryFromDate = DateTime.Now.Subtract(TimeSpan.FromDays(1));
m_ActionLogRepository = actionLogRepository;
Messages = new ObservableCollection<IActionLog>();
SearchDateCommand = new SimpleCommand { ExecuteDelegate = SetActionLogsBetweenDates };
SearchTopXRecord = new SimpleCommand { ExecuteDelegate = SetActionLogsForTopXRecords };
SetActionLogs();
//GetMessagesTypes();
}
#endregion
#region Methods
private void SetActionLogs()
{
List<IActionLog> actionLogs = m_ActionLogRepository.GetAllActionLogs();
Messages.Clear();
actionLogs.ForEach(actionLog => Messages.Add(actionLog));
}
public void SetActionLogsBetweenDates()
{
List<IActionLog> actionLogs = m_ActionLogRepository.GetAllActionLogsBetweenDates(QueryFromDate, QueryToDate);
Messages.Clear();
actionLogs.ForEach(actionLog => Messages.Add(actionLog));
}
public void SetActionLogsForTopXRecords()
{
List<IActionLog> actionLogs = m_ActionLogRepository.GetAllTopXActionLogs(TopXRecords);
Messages.Clear();
actionLogs.ForEach(actionLog => Messages.Add(actionLog));
}
public string GetMessagesTypes()
{
List<IActionLog> actionLogMessageType = m_ActionLogRepository.GetAllActionLogs();
var messageType = (
from messageTypes in actionLogMessageType
select messageTypes.MessageType).Distinct();
return messageType.ToString(); //Return Messages types
}
#endregion
}
}
答案 0 :(得分:1)
在WPF中,我们没有数据绑定方法的结果。相反,你有几个选择...事情是你需要在视图模型中执行,以便您可以调用您的方法。调用方法后,应将结果值设置为数据绑定到ComboBox.ItemsSource
属性的集合属性。
您可以在视图模型中执行的一种方法是将属性数据绑定到SelectedItem
属性(或类似属性)。每次所选项目更改时,执行将转到视图模型,您可以调用您的方法。举一个小例子:
private YourDataType selectedItem = new YourDataType();
public YourDataType SelectedItem
{
get { return selectedItem; }
set
{
selectedItem = value;
NotifyPropertyChanged("SelectedItem");
DoSomethingWithSelectedItem(SelectedItem); // <-- Call method here
}
}
在正确的点上执行视图模型的另一种方法可能是实现某种ICommand
在某种情况下被触发的......只要你得到执行,这取决于你在正确的时间进入视图模型,以便您调用方法并将结果填充到public
集合属性中。
你没有非常清楚地解释你的情况,所以这个解决方案可能不适合你,但你应该明白并能够从中抽象出一个解决方案。