C# 多语言WPF应用程序:不使用combobox

C# 多语言WPF应用程序:不使用combobox,c#,wpf,C#,Wpf,我已经使用Andre的答案创建了一个多语言WPF应用程序。我像这样装订文本 <TextBlock Text="{DynamicResource Create}"/> 语言显示为“英语”和“法语”。但是,当我切换语言时,不会再次调用转换器,也不会更新语言名称,因此这不是真正的解决方法 我非常感谢你给我一个关于原因和如何解决这个问题的提示。我将首先解释一些事情不起作用的原因 .... <DataTemplate> <TextBlock

我已经使用Andre的答案创建了一个多语言WPF应用程序。我像这样装订文本

<TextBlock Text="{DynamicResource Create}"/>
语言显示为“英语”和“法语”。但是,当我切换语言时,不会再次调用转换器,也不会更新语言名称,因此这不是真正的解决方法


我非常感谢你给我一个关于原因和如何解决这个问题的提示。

我将首先解释一些事情不起作用的原因

    ....
    <DataTemplate>
        <TextBlock Text="{DynamicResource LanguageId}"/>
    </DataTemplate>
    ....
您已接近解决方案。我的建议是尝试以下方法:-

    ....
    <DataTemplate>
        <TextBlock>
            <TextBlock.Text>
                <MultiBinding Converter="{StaticResource DynamicResourceConverter}">
                    <Binding Path="LanguageId"/>
                    <Binding Path="SomeOtherPropertyThatChangesWhenLanguageIsSwitched" Source="{StaticResource Locator}"/>
                </MultiBinding>
            </TextBlock.Text>
        </TextBlock>
    </DataTemplate>
    ....

提供的链接无效。感谢您的解释和帮助!
    ....
    <DataTemplate>
        <TextBlock Text="{DynamicResource LanguageId}"/>
    </DataTemplate>
    ....
    ....
    <DataTemplate>
        <TextBlock Text="{DynamicResource ResourceKey={Binding LanguageId}}"/>
    </DataTemplate>
    ....
    ....
    <DataTemplate>
        <TextBlock>
            <TextBlock.Text>
                <MultiBinding Converter="{StaticResource DynamicResourceConverter}">
                    <Binding Path="LanguageId"/>
                    <Binding Path="SomeOtherPropertyThatChangesWhenLanguageIsSwitched" Source="{StaticResource Locator}"/>
                </MultiBinding>
            </TextBlock.Text>
        </TextBlock>
    </DataTemplate>
    ....
    public class DynamicResourceConverter: IValueConverter, IMultiValueConverter
    {
        ....
        // original converter implementation for IValueConverter
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            ....
        }

        // newly added converter implementation for IMultiValueConverter
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            //call the original converter method with one value (assuming you've checked the array has at least one item!!
            return Convert(values[0], targetType, parameter, culture)
        }

        ....
    }