0

使用以下代码,在更新/更改 DependencyProperties 之一时调用 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

我认为会纠正这样的代码:

xml

 <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. 将 Button 的Command属性绑定到声明的命令。
  3. 在命令的 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 回答