VisualStudioのXAMLデザイナを拡張する 2.右クリックでGridのColumnを追加編


VisualStudioのXAMLデザイナ拡張第二回です。
今回はGridの列追加を、Grid上で右クリックしたらできるようなサンプルです。

環境

Visual Studio Community 2017
.NET Framework 4.7.1

実装イメージ


こんな感じでGridを右クリックするとコンテキストメニューに"Column追加"というメニューが出てきて、クリックすればColumnDefinitionが追加されるといった感じです。

1.下準備

今回拡張対象となるCustomGridの作成、デザイン時のMetadata用のアセンブリの作成、IProvideAttributeTable継承クラスの作成は前回を参照してください。

2.FeatureProviderを作る

今回はコンテキストメニューを拡張するのでPrimarySelectionContextMenuProvider継承クラスで作ります。
前回よりもさらに単純で、追加したMenuActionが実行されたらColumnDefinitionsプロパティを取得してColumnDefinitionを追加しているだけです。

CustomContextMenuProvider.cs
namespace CustomControl.VisualStudio.Design
{
    class CustomContextMenuProvider : PrimarySelectionContextMenuProvider
    {
        public CustomContextMenuProvider()
        {
            MenuAction action = new MenuAction("Column追加");
            action.Execute += (sender, e) =>
            {
                ModelItem item = e.Selection.PrimarySelection;

                ColumnDefinitionCollection collection = item.Properties["ColumnDefinitions"].ComputedValue as ColumnDefinitionCollection;
                collection.Add(new ColumnDefinition());
            };
            this.Items.Add(action);
        }
    }
}

3.XAMLデザイナで確認する

ここも前回の手順を確認してください。
これでやってみるとわかると思うんですけどうまく動かないんですよね。
画面上だと追加されるんですけど、XAMLに反映されないです。Collectionなので変更通知がXAMLのコードエディタに行かないんですかね。
鋭意調査中です。直せたら更新します。