1

想象一下,我有一个按钮和一个绑定:

<Button Content="{Binding Path=FailOverStrings.ConfigTestBtn, Source={StaticResource    ResourceWrapper}}></Button>

现在我想设置一组这样的按钮:

        <Grid >
            <ItemsControl>
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Grid>
                            <Button Content="{Binding Title}" />
                        </Grid>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </Grid>

我将在后面的代码中创建一个集合,但是如何说等于 'ConfigTestBtn' 的 'Title' 并不是真正的字符串 'ConfigTestBtn' 本身,而是 FailOverStrings 属性的名称?

绑定中的某种间接方式。我想我可以编写一个转换器来做到这一点,但这真的有必要吗?

4

1 回答 1

0

假设你有一个像下面这样的类。

public class FailOverStrings
{
    public FailOverStrings()
    {
        ConfigTestBtn = "Actual value";
    }

    public string ConfigTestBtn { get; set; }
}

然后你的转换器看起来像这样

public class PropertNameToValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string retValue = string.Empty;
        FailOverStrings settings = new FailOverStrings();
        foreach(PropertyInfo pinfo in settings.GetType().GetProperties())
        {
            if (pinfo.Name == value.ToString())
            {
                retValue = pinfo.GetValue(settings, null).ToString();
            }
        }
        return retValue;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

并像这样在按钮中使用这个转换器

<Window.Resources>
    <local:PropertNameToValueConverter x:Key="PropertNameToValueConverter"></local:PropertNameToValueConverter>
</Window.Resources>
<Grid>
    <Button Content="{Binding ElementName=myWindow, Path=PropertyName, Converter={StaticResource ResourceKey=PropertNameToValueConverter}}" Width="100" Height="30" />
</Grid>
于 2013-09-19T09:22:12.223 回答