0

私はこのスタイルを持っています:

                <DataTemplate>
                    <Button
                        Width="44"
                        Height="24"
                        VerticalAlignment="Top"
                        VerticalContentAlignment="Center"
                        HorizontalAlignment="Left"
                        HorizontalContentAlignment="Center"
                        Command="{Binding UninspectedPrintSelectedCommand}"
                        CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=Content}">

しかし、コマンドは正しく機能しません。出力ウィンドウを見ると、次の問題が発生します。

System.Windows.Data Error: 40 : BindingExpression path error: 'UninspectedPrintSelectedCommand' property not found on 'object' ''String' (HashCode=701007577)'. BindingExpression:Path=UninspectedPrintSelectedCommand; DataItem='String' (HashCode=701007577); target element is 'Button' (Name=''); target property is 'Command' (type 'ICommand')

ViewModel ICommand プロパティ:

    public ICommand UninspectedPrintSelectedCommand
    {
        get
        {
            return new DelegateCommand<object>((print) =>
            {
                string printName = print.ToString();
                int indexOfX = printName.IndexOf('x');
                Row = DiePrint.GetRow(printName);
                Col = DiePrint.GetCol(printName);

                if (diePrint == null) { diePrint = new DiePrint(Row + "x" + Col); }
                else
                {
                    diePrint.Row = Convert.ToInt32(row);
                    diePrint.Col = Convert.ToInt32(col);
                }
                LoadMap();
            });
        }
    }

これを解決する方法がわかりません。Button の Command プロパティはどのように文字列として解釈されますか?

何か意味があるとすれば、これはメイン ウィンドウではなく、App.xaml ファイルにあります。

4

1 に答える 1

1

あなたが望むのは、バインディングがビジュアル ツリーの上位にあるソースを使用するようにすることだと思います。ここでDataContextは、文字列に設定するのではなく、必要なビューモデルに設定します。

たとえばGrid、適切なデータ コンテキストを持つより高い階層があると仮定すると、次のようなバインディングを使用できます。

{Binding DataContext.UninspectedPrintSelectedCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}}

Grid適切なレベルのビジュアル ツリーに確実にあるものに置き換えます。

于 2015-05-27T16:01:14.483 に答える