2

この投稿に基づいて「MVVM flyout」を作成しました: https://marcominerva.wordpress.com/2015/01/15/how-to-open-and-close-flyouts-in-universal-apps-using-mvvm/

それはうまくいっています。しかし、コンパイルされたバインディング(x:Bind)では機能しません

これ:

 <Flyout local:FlyoutHelpers.Parent="{x:Bind ShowButton}"...

これの代わりに:

<Flyout local:FlyoutHelpers.Parent="{Binding ElementName=ShowButton}"...

ビルド中に奇妙なエラーがスローされます:

エラー CS1503 引数 1: 'Windows.UI.Xaml.Controls.Flyout' から 'Windows.UI.Xaml.FrameworkElement' に変換できません

x:Bind を使用する方法はありますか?

4

1 に答える 1

5

ここでの問題は、 の生成コードに関連しています{x:Bind}。 

私たちが知っているように{x:Bind}、生成されたコードを使用してその利点を実現します。これらのコードは、(C# の場合) <view name>.g.csのような名前のobjフォルダーにあります。詳細については、{x:Bind} マークアップ exstrong texttensionを参照してください。

.g.csファイルに移動すると(私が使用FlyoutHelperしたMainPageので、私の側ではMainPage.g.cs です)、エラーがメソッドにあることがわかりますSet_FlyoutDemoSample_FlyoutHelper_Parent。このメソッドはコンパイル時に生成されFlyoutDemoSample、私のプロジェクトの名前空間です。その名前はあなたの側で異なる場合があります。   ここに画像の説明を入力

このメソッドの定義に行くと、このメソッドの最初のパラメーターの型が であることがわかりますFrameworkElement。 

public static void Set_FlyoutDemoSample_FlyoutHelper_Parent(global::Windows.UI.Xaml.FrameworkElement obj, global::Windows.UI.Xaml.FrameworkElement value, string targetNullValue)
{
    if (value == null && targetNullValue != null)
    {
        value = (global::Windows.UI.Xaml.FrameworkElement) global::Windows.UI.Xaml.Markup.XamlBindingHelper.ConvertValue(typeof(global::Windows.UI.Xaml.FrameworkElement), targetNullValue);
    }
    global::FlyoutDemoSample.FlyoutHelper.SetParent(obj, value);
}

ただし、 を使用する場合FlyoutHelper、ここで設定するパラメータはFlyout.   クラスは から派生していません。そのため、エラーがスローされます: . 最初のパラメータの型を に変更すると、すべてのコードがうまく機能します。ここに画像の説明を入力 FlyoutFrameworkElementcannot convert from 'Windows.UI.Xaml.Controls.Flyout' to 'Windows.UI.Xaml.FrameworkElement'DependencyObject

public static void Set_FlyoutDemoSample_FlyoutHelper_Parent(global::Windows.UI.Xaml.DependencyObject obj, global::Windows.UI.Xaml.FrameworkElement value, string targetNullValue)
{
    if (value == null && targetNullValue != null)
    {
        value = (global::Windows.UI.Xaml.FrameworkElement) global::Windows.UI.Xaml.Markup.XamlBindingHelper.ConvertValue(typeof(global::Windows.UI.Xaml.FrameworkElement), targetNullValue);
    }
    global::FlyoutDemoSample.FlyoutHelper.SetParent(obj, value);
}

ただし、これらのコードは自動的に生成されるため、このプロジェクトを再構築しても同じエラーが発生します。これが UWP の潜在的なバグかどうかはわかりませんが、修正するためにできることは何もないと思います。Bindingしたがって、この特別なシナリオで引き続き使用することをお勧めします。

于 2016-05-20T12:06:49.723 に答える