モノトーンの伝説日記

Apex Legends, Splatoon, Programming, and so on...

<mini> x:Bind の辛い事案 (C# with C++/CX)

 IValueConverter::Convert に入れる language が null

 C++/CX を触った人なら知ってるかと思いますが、

  • C#System.StringnullC++/CX の Platform::String 型へのマーシャリングの際、例外になります。
  • C#System.StringSystem.String.EmptyC++/CX の Platform::String 型の Empty になります。
  • その他はそのままです。

 しかし x:Bind を使うと以下のようなコードが生成されてしまいます。

private void Update_MainPageViewModel_StatusBarColor_IsEnabled(global::System.Boolean obj, int phase)
{
  if((phase & ((1 << 0) | NOT_PHASED | DATA_CHANGED)) != 0)
  {
    XamlBindingSetters.Set_Windows_UI_Xaml_UIElement_Visibility(
      this.obj23, (global::Windows.UI.Xaml.Visibility)this.LookupConverter("BooleanToVisibilityConverter").Convert(
        obj,
        typeof(global::Windows.UI.Xaml.Visibility),
        null,
        null));
  }
}

 つまり x:Bind は C# アプリから C++/CX の API 群を使うときには現時点では使えません。global::System.String.Empty にしてほしい…

 以上。