【问题标题】:Multibinding from Password box using prism Delegate Command使用 prism 委托命令从密码框进行多重绑定
【发布时间】:2012-10-23 15:53:38
【问题描述】:

在使用密码框或任何形式的常规文本控件时,我似乎无法访问这些属性。我已经设置了一个值转换器,它会在更新时正确返回值,但是一旦我的按钮触发命令,参数似乎被重置为 null。

XAML

<Button x:Name="RegisterButton" Content="register" Height="28" Margin="0,0,8,8" VerticalAlignment="Bottom" Background="#FF005D99" BorderBrush="White" Foreground="White" FontSize="13.333" TextOptions.TextFormattingMode="Display" FontFamily="/Agile Project Management Tool 2012;component/Fonts/#Segoe UI" Padding="1,0,1,1" HorizontalAlignment="Right" Width="90" Command="{Binding RegisterCommand}">
        <Button.CommandParameter>
            <MultiBinding Converter="{StaticResource ParamConverter}">
                <Binding ElementName="EmailTextInput" Path="Text"/>
                <Binding ElementName="PhoneTextInput" Path="Text"/>
            </MultiBinding>
        </Button.CommandParameter>
    </Button>

值转换器

  class TwoParamConverter : IMultiValueConverter
  {
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return values;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
  }

查看模型

    public ResigtrationViewModel()
    {
        _browsePicturesCommand = new DelegateCommand(OnBrowsePicturesCommand);
        _registerCommand = new DelegateCommand<object>(OnRegisterCommand);
    }

    private void OnRegisterCommand(object paramaters)
    {
        var values = (object[])paramaters;
        var a = (string)values[0];
        var b = (string)values[1];

        MessageBox.Show(a);
        MessageBox.Show(b);
    }

但是,当我在 OnRegisterCommand 调用中检查参数时,它们似乎为空。

任何帮助将不胜感激!

【问题讨论】:

  • 这些方法都是你的类的一部分吗..?如果是这样,您的括号似乎不适合初学者.. 确保方法是该类的一部分
  • 不,这只是关键的方法。 TwoParamConverter 是一个单独的类,ResigtrationViewModel 只是绑定命令的构造函数,而 OnRegisterCommand 是正在执行的命令。
  • 参数是null还是转换后的值?你为什么要投?而且转换器不是仅用于将视图模型中的某些内容转换为视图中可读的内容。

标签: c# .net mvvm prism


【解决方案1】:

试试这个

public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
    //any checks and such things you can add yourself :)
    return new Tuple<string,string>((string)values[0],(string)values[1]);

    //or 
    //return values.ToArray()
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-05-08
  • 2011-03-12
  • 2012-10-31
  • 2018-03-31
  • 1970-01-01
  • 2013-01-27
  • 2017-02-20
  • 2017-10-28
相关资源
最近更新 更多