Prism-跨区域数据绑定

本文关键字:数据绑定 区域 Prism- | 更新日期: 2023-09-27 18:00:08

假设我有两个区域A和B。

区域A:

<Grid>
    <TextBlock Name="tba"> HAHAHA </TextBlock>
</Grid>

区域B:

<Grid>
    <TextBlock Text="{Binding ElementName=tba, Path=Text}"/>
</Grid>

这不起作用。解决此问题的方法是什么,因此在区域B中也显示"HAHAHA"?

Prism-跨区域数据绑定

您的视图模型可以通过EventAggregator相互通信以建立连接。

// needs to be public if the two view models live in different assemblies
internal class ThePropertyChangedEvent : PubSubEvent<string>
{
}
internal class ViewAViewModel : BindableBase
{
    public ViewAViewModel( IEventAggregator eventAggregator )
    {
        _eventAggregator = eventAggregator;
        eventAggregator.GetEvent<ThePropertyChangedEvent>().Subscribe( x => TheProperty = x );
    }
    public string TheProperty
    {
        get { return _theProperty; }
        set
        {
            if (value == _theProperty)
                return;
            _theProperty = value;
            _eventAggregator.GetEvent<ThePropertyChangedEvent>().Publish( _theProperty );
            OnPropertyChanged();
        }
    }
    #region private
    private readonly IEventAggregator _eventAggregator;
    private string _theProperty;
    #endregion
}

ViewBViewModel本质上是相同的(在这个简单的例子中)。