我使用Converter将属性显示到XAML MVVM视图中。
<xctk:DoubleUpDown Value="{Binding CurrentIndex, Converter={StaticResource IndexToNumberConverter}} />
当代码更新属性时,调用IndexToNumberConverter.Convert(...)方法并按预期运行。
我希望从UI更新控件时属性会更新。 这不是发生的事情。 而是调用控制器的COnvertBack方法,并且不运行属性设置器。
我想,如果我将我的属性作为转换器的参数传递,然后实现转换器convertBack方法来执行相应的工作,它将起作用。 但我很确定这不是正确的方法:)
在更新UI控件时,是否有更简单的方法来更新我的属性?
提前谢谢。答案 0 :(得分:3)
如果您希望UI上的更改反映在ViewModel上,则需要双重绑定。我不知道你的控件是做什么的,但我会用TextBox显示它。
<TextBox Text="{Binding Title, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged }" />
Mode=TwoWay
使此TextBox能够在UI上触发对ViewModel所做的更改。 TwoWay模式是TextBox的默认模式,我不知道默认情况下是否在您的控件上启用了它。
如果您使用ValueConverter,则需要像其他已经提到的那样实现ConvertBack。再一次,不知道你的代码是怎样的,但是这样的东西会起作用。
public class IndexToNumberConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int index = Convert.ToInt32(value);
switch(index)
{
case 0:
return "ZERO";
case 10:
return "TEN";
default:
return "OTHER";
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string val = value.ToString();
switch(val)
{
case "ZERO":
return 0;
case "TEN":
return 10;
default:
return -1;
}
}
}
然后,绑定控件将如下所示:
<TextBox Text="{Binding Title, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource IndexToNumberConverter} }" />
如果您希望绑定从UI到ViewModel,则只需指定Mode=OneWayToSource
。
我希望这会有所帮助,否则我建议您使用更相关的代码更新您的问题。
答案 1 :(得分:-1)
从您的查询中我了解到,当您从ui设置时,该属性不会转换回来。我认为问题是你没有在你的属性中实现iPropertyChange接口,这就是为什么属性没有更新受影响的值。