根据未绑定的属性名称更新控件

时间:2013-11-08 13:43:11

标签: c# wpf xaml mvvm

我有一些计算多个值的代码。计算完成后,我希望所有受影响的控件都能更新。

最容易用代码解释......

XAML:

<TextBlock x:Name="A" Text="{Binding PropertyA}" />
<TextBlock x:Name="B" Text="{Binding PropertyB}" />

视图模型:

public decimal PropertyA { get; set; }
public decimal PropertyB { get; set; }

public void CalculateAandB()
{
    PropertyA = 12m;
    PropertyB = 14m;

    PropertyChanged(this, new PropertyChangedEventArgs("Recalculated"));
}

在某种程度上,我希望在"Recalculated"事件被提升时,A和B都会使用各自的新值进行更新。

我想在XAML中而不是C#代码中执行此操作,并且我不想替换整个ViewModel,因为只更改了ViewModel属性的一部分。

1 个答案:

答案 0 :(得分:1)

为每个属性引发PropertyChanged,即要更新的绑定:

public void CalculateAandB()
{
    PropertyA = 12m;
    PropertyB = 14m;

    PropertyChanged(this, new PropertyChangedEventArgs("PropertyA"));
    PropertyChanged(this, new PropertyChangedEventArgs("PropertyB"));
}

或将属性分组为单独的嵌套视图模型:

class SubViewModel
{
    public decimal PropertyA { get; set; }
    public decimal PropertyB { get; set; }
}

class ViewModel
{
    public SubViewModel SubViewModel { get; set; }

    public void CalculateAandB()
    {
        SubViewModel.PropertyA = 12m;
        SubViewModel.PropertyB = 14m;

        PropertyChanged(this, new PropertyChangedEventArgs("SubViewModel"));
    }
}

<TextBlock x:Name="A" Text="{Binding SubViewModel.PropertyA}" />
<TextBlock x:Name="B" Text="{Binding SubViewModel.PropertyB}" />