Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将IMultiValueConverter与MVVM模式结合使用?_C#_Wpf_Mvvm - Fatal编程技术网

C# 如何将IMultiValueConverter与MVVM模式结合使用?

C# 如何将IMultiValueConverter与MVVM模式结合使用?,c#,wpf,mvvm,C#,Wpf,Mvvm,我的viewmodel具有以下两个属性: public ValueType ValueType { get { return _valuetype; } set { _valuetype = value; OnPropertyChanged(); } } public double? Value { get { return _value; } set { _value = value; OnPropertyChanged(); } } ValueType是一个enum: public enu

我的viewmodel具有以下两个属性:

public ValueType ValueType { get { return _valuetype; } set { _valuetype = value; OnPropertyChanged(); } }
public double? Value { get { return _value; } set { _value = value; OnPropertyChanged(); } }
ValueType
是一个
enum

public enum ValueType
{
    Currency,
    Quotas
}
我想使用
IMultiValueConverter
格式化一个文本框,该转换器根据我的
ValueType
属性格式化我的
Value
属性。如果
ValueType
设置为
ValueType.Currency
,我需要显示千位分隔符和两位小数,或者
.ToString(“N2”)
;如果
ValueType
设置为
ValueType.quota
,我需要显示8位小数和千位分隔符,或者
.ToString(“N8”)
。这是我的文本框:

<TextBox Width="250" TextAlignment="Right"
         HorizontalAlignment="Left">
    <TextBox.Text>
        <MultiBinding Converter="{StaticResource CurrencyQuotaConverter}">
            <Binding Path="ValueType" Mode="OneWay"/> <!--from my DataContext-->
            <Binding Path="Value" Mode="TwoWay"/> <!--from my DataContext-->
        </MultiBinding>
    </TextBox.Text>
</TextBox>
您可以看到我的
ConvertBack()
方法可能是错误的。My
ValueType
属性绑定到两个单选按钮。更改其值可以很好地更新转换。如果我点击“货币”单选按钮,我的文本框将用2位小数格式化我的数字,否则,它将按预期显示8位小数。但问题是,
ConvertBack()
方法从未更新我的viewmodel上的
属性,也从未调用
set
构造函数。更改文本框的值也不会触发转换器


我的问题是:如何使用IMultiValueConverter保持视图格式正确,并且始终更新视图模型?有可能吗?我是否应该找到另一种解决方案?

将FormattedValue属性添加到视图模型可能更简单。将模式更改为双向@Clemens,然后将FormattedValue属性绑定到我的文本框?如何更新Value属性?@aepot我的第二个绑定始终是双向模式。您是指多重绑定吗?在FormattedText属性的setter中,您将根据ValueType解析字符串,并相应地设置值。
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
    ValueType _valuetype = (ValueType)values[0];
    if (values[1] == null) return null; //My Value property is nullable
    double _value = double.Parse(values[1].ToString());
    return _valuetype == ValueType.Currency ? _value.ToString("N2") : _value.ToString("N8");
}

public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
    object[] returnedvalue = { null, null };
    returnedvalue[1] = value; //Only my second bound value is twoway mode.
    return returnedvalue;
}