C# ContentStringFormat绑定没有';不刷新属性更改

C# ContentStringFormat绑定没有';不刷新属性更改,c#,.net,wpf,mvvm,data-binding,C#,.net,Wpf,Mvvm,Data Binding,我遇到了一个问题,导致标签在内容不变但格式不变时刷新。ContentStringFormat属性已绑定到viewmodel,并会通知属性更改,但标签不会更新。下面是代码中的最小复制示例以及演示此问题的准备编译/运行的项目 下载项目: XAML: <StackPanel> <Label Content="{Binding FirstLabelContent}"></Label> <Label Content="{Binding Second

我遇到了一个问题,导致标签在内容不变但格式不变时刷新。ContentStringFormat属性已绑定到viewmodel,并会通知属性更改,但标签不会更新。下面是代码中的最小复制示例以及演示此问题的准备编译/运行的项目

下载项目:

XAML:

<StackPanel>
    <Label Content="{Binding FirstLabelContent}"></Label>
    <Label Content="{Binding SecondLabelContent}" ContentStringFormat="{Binding SecondLabelFormatContent}"></Label>
    <Button Click="Button_Click">Add "test" to all bound elements</Button>        
</StackPanel>

标签不支持通过绑定刷新
ContentStringFormat

您可以使用这样的多转换器:

public class MultiConverter2 : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        string SecondLabelContent = values[0] as string;
        string SecondLabelFormatContent = values[1] as string;

        return string.Format(SecondLabelFormatContent, SecondLabelContent);
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}
XAML:

<StackPanel>
    <StackPanel.Resources>
        <local:MultiConverter2 x:Key="conv" />
    </StackPanel.Resources>
    <Label Content="{Binding FirstLabelContent}"></Label>
    <Label>
        <Label.Content>
            <MultiBinding Converter="{StaticResource conv}">
                <Binding Path="SecondLabelContent" />
                <Binding Path="SecondLabelFormatContent" />
            </MultiBinding>
        </Label.Content>
    </Label>
    <Button Click="Button_Click">Add "test" to all bound elements</Button>
</StackPanel>

向所有绑定元素添加“test”

是否检查VS输出以查看是否存在绑定错误?或者任何xaml警告?@Mishka无警告,在更新之前运行良好,因此绑定也很好,不是打字错误,因为我在实际项目中每次出现这个问题,并且您可以看到复制示例很难简单,或者您需要为SecondLabelContent提高PropertyChanged,否则它不会“获得”stringformat又出现了?@Mishka这是不可能的,因为secondlabelcontent没有改变,这就是为什么我希望在改变时进行UI更新,我制作了一个简单的复制示例,因为这是显示问题的标准方式,但在我的实际项目中,找出必须改变的100个属性是不可能的,我是数据绑定到formatstring的,我希望它在更改时会更新,这是wpf中其他任何东西的工作方式,所以我试图看看我是否偶然发现wpf错误,或者我是否做错了什么,以及是否有解决方法。解决方法:使用
多绑定
并自己格式化文本
<StackPanel>
    <StackPanel.Resources>
        <local:MultiConverter2 x:Key="conv" />
    </StackPanel.Resources>
    <Label Content="{Binding FirstLabelContent}"></Label>
    <Label>
        <Label.Content>
            <MultiBinding Converter="{StaticResource conv}">
                <Binding Path="SecondLabelContent" />
                <Binding Path="SecondLabelFormatContent" />
            </MultiBinding>
        </Label.Content>
    </Label>
    <Button Click="Button_Click">Add "test" to all bound elements</Button>
</StackPanel>