C# ContentStringFormat绑定没有';不刷新属性更改
我遇到了一个问题,导致标签在内容不变但格式不变时刷新。ContentStringFormat属性已绑定到viewmodel,并会通知属性更改,但标签不会更新。下面是代码中的最小复制示例以及演示此问题的准备编译/运行的项目 下载项目: XAML: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
<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>