在我的UserControl中,我正在使用包含三个参数的ListCollectionView。其中两个使用个性化的RichTextBox来解析HTML。在此控件上,集合中的下一个/上一个项目有两个按钮。
我正在尝试在ViewModel中使用Event Aggregator进行两项操作:
第一个操作:
public PopViewModel()
{
...
AlertData.CollectionChanged += (s, e) => AlertCollectionView.Refresh();
AlertCollectionView = new ListCollectionView(AlertData);
AlertCollectionView.MoveCurrentToPosition(0);
}
public void PreviousRecordExecute()
{
AlertCollectionView.MoveCurrentToPrevious();
}
public void NextRecordExecute()
{
AlertCollectionView.MoveCurrentToNext();
}
private Alert CurrentAlert
{
get { return AlertCollectionView.CurrentItem as Alert; }
set
{
AlertCollectionView.MoveCurrentTo(value);
NotifyOfPropertyChange();
}
}
public void MarkPopAlertAsRead(FeedItem CurrentAlert)
{
XElement doc = XElement.Load(diary);
XElement elementToChange=doc.Descendants("Alert")
.Single(x=>((int?)x.Element("key")==CurrentAlert.Alertid));
elementToChange.SetElementValue("IsRead","True");
doc.save(diary);
}
MarkPopAlertAsRead是我需要与Event Aggregator关联的方法。
第二项行动:
public partial class PopupView : UserControl
{
public PopupView()
{
InitializeComponent();
this.AlertTitleRichTextBox.TextFormatter = new HtmlFormatter();
this.AlertTxtRichTextBox.TextFormatter = new HtmlFormatter();
}
}
使用此代码,如果我更改了当前项目,则这两个参数会从屏幕中消失,因此我需要重新加载Textformatter。
观点:
<uc:RichTextBox Margin="29,86,31,301" x:Name="AlertTitleRichTextBox" Text="{Binding AlertCollectionView/AlertTitle, UpdateSourceTrigger=PropertyChanged}" BorderThickness="0" Background="{x:Null}"/>
<TextBox Margin="257,378,10,12" Text="{Binding AlertCollectionView/AlertStartDate, UpdateSourceTrigger=PropertyChanged}" BorderThickness="0" Background="{x:Null}"/>
<uc:RichTextBox Margin="10,113,10,48" x:Name="AlertTxtRichTextBox" Text="{Binding AlertCollectionView/AlertText, UpdateSourceTrigger=PropertyChanged}" BorderThickness="0" Background="{x:Null}"/>
我希望在集合发生变化时(通过点击下一个/上一个按钮)执行这两个操作。我需要一些实施帮助,因为Caliburn Micro文档对我没有帮助。