ViewModel如何在需要时从视图中请求数据?

时间:2011-08-11 17:49:58

标签: wpf mvvm dependency-properties

我的View上有一个计算属性,我需要绑定到我的ViewModel。我正在使用WPF,似乎没有办法使自我计算的可绑定属性(Dependency Property)。我不想在View的状态发生变化时执行计算,因为它们是时间密集的。我想在ViewModel需要结果时进行计算,即当它关闭时。

2 个答案:

答案 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)和视图模型调用CanExecuteExecute。它不是纯粹的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。