0

次のコードでは、DependencyProperties の 1 つが更新または変更されているときに、Convert メソッドが呼び出されています。

ボタンがクリックされたときにのみコンバーターが呼び出されるようにします。どうやってやるの?

コードは次のとおりです。

 <Button Content="Create Project">

                <Button.CommandParameter>
                    <MultiBinding Converter="{StaticResource MyConverter}" UpdateSourceTrigger="Explicit"  Mode="TwoWay">
                        <Binding Path="Text" ElementName="txtDesc"/>
                        <Binding Path="Text" ElementName="txtName"/>
                        <Binding Path="SelectedItem" ElementName="ListBox"/>
                        <Binding Path="SelectedItem.Language" ElementName="TreeView"/>
                    </MultiBinding>
                </Button.CommandParameter>

            </Button>
4

2 に答える 2

1

このコードのようなものを修正すると思います:

xaml

 <Button Content="Create Project" Click="Button_Click"/>

cs

 private void Button_Click(object sender, RoutedEventArgs e)
    {
        string param1 = txtDesc.Text;
        string param2 = txtName.Text;
        object param3 = ListBox.SelectedItem;
        object param4 = TreeView.SelectedItem;

        object convertResult = MyConverterUtils.Convert(param1, param2, param3, param4);
        (sender as Button).CommandParameter = convertResult;
        //or you can execute some method here instead of set CommandParameter
    }


    public class MyConverterUtils 
    {
         //convert method
         //replace Object on your specific types 
         public static Object Convert(string param1, string param2,Object  param3,Object param4)
         {
             Object convertResult=null;

             //convert logic for params and set convertResult
             //for example convertResult = (param1 + param2).Trim();

             return convertResult;
         } 
    }
于 2013-01-24T07:28:07.370 に答える
-1

MVVMを使用すると、非常に簡単になります。

  1. RelayCommandICommandを使用して、MVVM でaを宣言します。
  2. ボタンのCommandプロパティを宣言されたコマンドにバインドします。
  3. Command の Execute メソッドでロジックを実行します。
  4. 必要なプロパティを更新します。

ビューモデル

    public class MyViewModel : INotifyPropertyChanged
    {
        public ICommand UpdateSomething { get; private set; }

        public MyViewModel()
        {
            UpdateSomething = new RelayCommand(MyCommandExecute, true);
        }

        private void MyCommandExecute(object parameter)
        {
            // Your logic here, for example using your converter if
            // you really need it.

            // At the end, update the properties you need
            // For example adding a item to an ObservableCollection.
        }
    }

XAML

    <Button Content="Create Project" Command="{Binding UpdateSomething}"/>
于 2013-01-24T08:31:07.107 に答える