我的View上有一个计算属性,我需要绑定到我的ViewModel。我正在使用WPF,似乎没有办法使自我计算的可绑定属性(Dependency Property)。我不想在View的状态发生变化时执行计算,因为它们是时间密集的。我想在ViewModel需要结果时进行计算,即当它关闭时。
答案 0 :(得分:2)
根据您上面的评论,我会使用Converter
您的ViewModel将包含加密数据,并且与View的绑定使用转换器将其转换为可读的内容。在将数据保存回ViewModel时,请使用转换器的ConvertBack
方法再次加密数据。
<TextBox Text="{Binding EncryptedAccountNumber,
Converter={StaticResource DecryptTextConverter}}" />
public class DecryptTextConverter: IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
// Implement decryption code here
return decryptedValue;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
// Implement encryption code here
return ecryptedValue;
}
}
如果加密代码需要一段时间,请设置UpdateSourceTrigger=Explicit
并在单击“保存”按钮时手动触发源更新。
答案 1 :(得分:0)
这是我的解决方案。它的工作方式与ICommand
相同,但视图提供了委托(CalculationDelegate
)和视图模型调用CanExecute
和Execute
。它不是纯粹的MVVM,但它可以工作。
public interface ICalculationProvider<TResult>
{
event EventHandler CanExecuteChanged;
Func<TResult> CalculationDelegate { get; set; }
bool CanExecute();
TResult Execute();
bool TryExecute(out TResult a_result);
}
我已经将Rachel的答案标记为正确,因为我在这里做的不是纯粹的MVVM。