微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 如何用StaticResource的字符串填充List

@H_502_2@
在我在C#4.0的 WPF项目中,在资源字典中我有字符串资源:

<System:String x:Key="s_one">One</System:String>
    <System:String x:Key="s_two">Two</System:String>

我想使用上面的字符串来填充xaml文件中的字符串Ls列表.

<cc:XYZ.Ls>   
       <StaticResource ResourceKey="s_one" />   
       <StaticResource ResourceKey="s_two" /> 
    </cc:XYZ.Ls>

这不起作用.例外中的细节说明
{“’One’不是属性’Ls’的有效值.”}

但是,当我在这些字符串之前添加一个字符串时,它运行得很好.

<cc:XYZ.Ls>
      <System.String>Zero</System.String>
      <StaticResource ResourceKey="s_one" />
      <StaticResource ResourceKey="s_two" />
    </cc:XYZ.Ls>

运行后Ls中的项目为{“Zero”,“One”,“Two”}

有没有办法将StaticResource中的字符串插入字符串列表而不在XAML中添加额外的字符串?

注意:XYZ类的相关部分:

public partial class XYZ : UserControl
    {
         public static readonly DependencyProperty LsProperty =
                DependencyProperty.Register("Ls",typeof(List<string>),typeof(XYZ),new FrameworkPropertyMetadata(new List<string>()));

          public List<string> Ls
          {
             get { return (List<string>)GetValue(XYZ.LsProperty); }
             set { SetValue(XYZ.LsProperty,value); }
           }

          public XYZ()
          {
              InitializeComponent();
              Ls = new List<string>();
          }
    }
@H_502_2@

解决方法

我更喜欢 this方式

但你可以解决像……

public class ArrayToListConvertor : IValueConverter
{
    public object Convert(object value,Type targettype,object parameter,System.Globalization.CultureInfo culture)
    {
        if (value == null)
            return new List<string>();
        return ((string[]) value).ToList();
    }

    public object ConvertBack(object value,System.Globalization.CultureInfo culture)
    {
         throw new NotImplementedException();
    }
}
public partial class Xyz : UserControl
 {
    public static readonly DependencyProperty LsProperty =
            DependencyProperty.Register("Ls",typeof(Xyz),new FrameworkPropertyMetadata(null));

    public List<string> Ls
    {
        get { return (List<string>)GetValue(Xyz.LsProperty); }
        set { SetValue(Xyz.LsProperty,value); }
    }

    public Xyz()
    {
        InitializeComponent();
    }
  }
<Window.Resources>

    <x:Array Type="sys:String" x:Key="lst">
        <StaticResource ResourceKey="s_one"/>
        <StaticResource ResourceKey="s_two" />
    </x:Array>

     <wpfApplication2:ArrayToListConvertor x:Key="Conv"></wpfApplication2:ArrayToListConvertor>
</Window.Resources>

<Grid>

    <wpfApplication2:Xyz x:Name="Xyz" Ls="{Binding Path=.,Source={StaticResource lst},Converter={StaticResource Conv}}">

    </wpfApplication2:Xyz>

    <ListBox ItemsSource="{Binding ElementName=Xyz,Path=Ls }">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding}"></TextBlock>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>
@H_502_2@ @H_502_2@
@H_502_2@
@H_502_2@

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐