0

私はこのUIシェルを持っています:
ここに画像の説明を入力

更新ボタンで、私は呼び出します_eventAggregator.GetEvent<RefreshEvent>().Publish();

そして、タブ内のすべての領域のコードがこのイベントを購読していました。

問題: 問題は、現在アクティブなタブのみを更新したいということです。しかし、私の場合、すべてのタブが更新されています。これを解決するための良い方法はありますか?

編集1
私は私の見解で実装IActiveAwareします:

public partial class ShipsControlView : UserControl, IActiveAware
{
    public ShipsControlView()
    {
        InitializeComponent();
    }

    private bool isActive;

    public bool IsActive
    {
        get
        {
            return this.isActive;
        }
        set
        {
            if (this.isActive == value)
                return;

            this.isActive = value;

            var viewModelActiveAware = this.DataContext as IActiveAware;
            if (viewModelActiveAware != null)
                viewModelActiveAware.IsActive = value;

            this.OnIsActiveChanged();
        }
    }

    public event EventHandler IsActiveChanged;

    protected virtual void OnIsActiveChanged()
    {
        var handler = this.IsActiveChanged;
        if (handler != null)
            handler(this, EventArgs.Empty);
    }
}

このビューを tabControl に追加しました:

<TabControl
        prism:RegionManager.RegionName="TabRegion2"
        ItemContainerStyle="{StaticResource HeaderStyle}"
        ></TabControl>

.

regionManager.RegisterViewWithRegion("TabRegion2", typeof(ShipsControlView));

のステータスを確認しIsActiveます。タブをクリックすると常に変更されます(正常に動作します)。

問題: タブがアクティブでない場合、そのタブのコマンドはグローバル コンポジット ボタンでトリガーされますが、そうしてはなりません。

4

1 に答える 1

1

これにはイベントアグリゲーターを使用しないでください。CompositeCommands を使用する必要があります。IActiveAware を自動的に実装すると、アクティブなタブ/VM も監視します。

ドキュメントは次のとおりです。http://prismlibrary.readthedocs.io/en/latest/WPF/09-Communication/#solution-commanding

于 2016-12-22T18:17:57.820 に答える