1

コマンドが添付されたマルチバインディングを持つボタンがあります:

<Button Content="remove" HorizontalAlignment="Right" VerticalAlignment="Top" Cursor="Hand" Focusable="False">
  <Button.Command>
      <Binding  Path="DataContext.DeleteColumnCommand"  ElementName="treeView" />
  </Button.Command>
  <Button.CommandParameter>
      <MultiBinding  Converter="{StaticResource midConverter}">
              <Binding Path="Text"  ElementName="tableName"/>
              <Binding Path="Name" />
      </MultiBinding>
  </Button.CommandParameter>
</Button>

コンバーターにブレークポイントを設定すると、すべての値が設定され、機能しているように見えます。

ただし、コマンドで実際に呼び出されると、 null が設定された配列を引数として受け取り ます。

これは私が割り当てていない参照型であり、WPF のコンテキストでは最大パフォーマンスが非常に必要とされるため、ナンセンスではありません。

私の質問は次のとおりです: WPF のような突然変異に関するガイダンス/保証を最もよく要約しているのは何ですか?

これに関するルールはありますか?

PS :他の人が同じ問題を抱えてて、どうやら原因を理解していなかったようです。

PPS : 質問を十分に明確にしていない可能性がありますが、取得したものが再利用される可能性があるため、ヒープに新しい構造、リスト、配列などを割り当てる必要があるのは当然のことです。問題は次のとおりです。このアドホックな例から、そのような場合の WPF のルールは何ですか?

4

1 に答える 1

0

ここに同様の質問への回答があります

マルチバインディングとコンバーターを使用できます

<Button Content="Add" Command="{Binding AddCommand}"
 <Button.CommandParameter>
    <MultiBinding Converter="{StaticResource YourConverter}">
         <Binding Path="Text" ElementName="txt1"/>
         <Binding Path="Text" ElementName="txt2"/>
    </MultiBinding>
 </Button.CommandParameter>
</Button>

コンバーター: 新しい配列を作成することが重要です!

public class YourConverter : IMultiValueConverter
{
 public object Convert(object[] values, ...)
 {
    //.Net > 4.0
    return new Tuple<int, int>((int)values[0], (int)values[1]); //<-- this is important

    //or .Net < 4.0
    //return values.ToArray();//<-- this is important
 }

 ...
}

指図

private void  CommandExecute(object parameter)
{
    var o= (Tuple<int, int>)parameter;
    var a= o.Item1;
    var b= o.Item2;
    Calculater calcu = new Calcu();
    int c = calcu.sum(a, b);      
}

ps: pls は私の構文をチェックしてください - それは私の心から書かれたものです...

于 2013-04-05T05:47:29.220 に答える