如何在WPF中的ViewModel中使用Caliburn Micro Event Aggregator

时间:2015-06-02 09:26:18

标签: c# wpf mvvm eventaggregator listcollectionview

在我的UserControl中,我正在使用包含三个参数的ListCollectionView。其中两个使用个性化的RichTextBox来解析HTML。在此控件上,集合中的下一个/上一个项目有两个按钮。

我正在尝试在ViewModel中使用Event Aggregator进行两项操作:

  1. 对于当前项目,我需要在xml文件中编写参数
  2. 对于当前项目,我需要为两个RichTextBox重新初始化html格式化程序
  3. 第一个操作:

        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文档对我没有帮助。

0 个答案:

没有答案