加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 22:00:55 所属栏目:百科 来源:网络整理
导读:在我在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"
在我在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>();
          }
    }

解决方法

我更喜欢 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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读