C# WPF-将具有字符串列表的类绑定到ListBox
我在将多个列表绑定到列表框时遇到问题。我希望每个列表都有不同颜色的不同数据模板 我有以下的模型课C# WPF-将具有字符串列表的类绑定到ListBox,c#,wpf,xaml,listbox,C#,Wpf,Xaml,Listbox,我在将多个列表绑定到列表框时遇到问题。我希望每个列表都有不同颜色的不同数据模板 我有以下的模型课 public class Users { public Members Members{ get; set; } } public class Members { public List<string> Moderators { get; set; } public List<string> Viewers { get; se
public class Users
{
public Members Members{ get; set; }
}
public class Members
{
public List<string> Moderators { get; set; }
public List<string> Viewers { get; set; }
}
我绑定到这个列表框
<ListBox ItemsSource="{Binding Users.Members.Viewers}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
现在我只有一个列表绑定到列表框。它工作得很好,但我希望其他列表也绑定到同一个列表框。除此之外,我希望版主有一个不同的模板
我尝试了很多不同的方法,但似乎都不管用
及以下类别:
class Person
{
public string Name{get;set;}
public MemberType Type{get;set;}
}
然后换成这个
public class Members
{
public List<Person> Moderators { get; set; }
public List<Person> Viewers { get; set; }
}
及以下类别:
class Person
{
public string Name{get;set;}
public MemberType Type{get;set;}
}
然后换成这个
public class Members
{
public List<Person> Moderators { get; set; }
public List<Person> Viewers { get; set; }
}
与其从原始对象中删除名称,为什么不保留它并根据原始类指定不同的颜色 除此之外,我希望版主有一个不同的模板 如果你只有字符串,那是不可能的。记住列表框最终只能看到一个列表;在一个列表中,如何将字符串标记为版主或查看器 使用不同颜色的不同数据模板 如果只有字符串,我建议您创建包装类,一个用于版主,一个用于查看者,然后将字符串投影到要保存的类中。然后你可以按照我下面的建议/例子来做
通过使用复合集合来保存不同的项(或者如果实例具有这种公共性,则可以实际使用基类列表或接口列表),然后使用专门的数据模板来查找原始类,就可以做到这一点 例子 我有两个班,一个叫
Ships
,一个叫Passage
。请注意,这两个类都有一个Name
属性,但是可以对模板中的一个或两个使用Name
以外的内容
下面我定义了数据模板和我的列表框
<Grid>
<Grid.Resources>
<DataTemplate DataType="{x:Type c:Ship}">
<TextBlock Text="{Binding Path=Name}"
Foreground="Red" />
</DataTemplate>
<DataTemplate DataType="{x:Type c:Passage}">
<TextBlock Text="{Binding Path=Name}"
Foreground="Blue" />
</DataTemplate>
</Grid.Resources>
<ListBox Name="myListBox"
Height="300"
Width="200"
ItemsSource="{Binding MyCompositeCollection}">
</ListBox>
</Grid>
在这里,我加载复合集合:
var temp = new CompositeCollection();
Ships.ForEach(sh => temp.Add(sh));
Passages.ForEach(ps => temp.Add(ps));
MyCompositeCollection = temp;
与其从原始对象中删除名称,为什么不保留它并根据原始类指定不同的颜色 除此之外,我希望版主有一个不同的模板 如果你只有字符串,那是不可能的。记住列表框最终只能看到一个列表;在一个列表中,如何将字符串标记为版主或查看器 使用不同颜色的不同数据模板 如果只有字符串,我建议您创建包装类,一个用于版主,一个用于查看者,然后将字符串投影到要保存的类中。然后你可以按照我下面的建议/例子来做
通过使用复合集合来保存不同的项(或者如果实例具有这种公共性,则可以实际使用基类列表或接口列表),然后使用专门的数据模板来查找原始类,就可以做到这一点 例子 我有两个班,一个叫
Ships
,一个叫Passage
。请注意,这两个类都有一个Name
属性,但是可以对模板中的一个或两个使用Name
以外的内容
下面我定义了数据模板和我的列表框
<Grid>
<Grid.Resources>
<DataTemplate DataType="{x:Type c:Ship}">
<TextBlock Text="{Binding Path=Name}"
Foreground="Red" />
</DataTemplate>
<DataTemplate DataType="{x:Type c:Passage}">
<TextBlock Text="{Binding Path=Name}"
Foreground="Blue" />
</DataTemplate>
</Grid.Resources>
<ListBox Name="myListBox"
Height="300"
Width="200"
ItemsSource="{Binding MyCompositeCollection}">
</ListBox>
</Grid>
在这里,我加载复合集合:
var temp = new CompositeCollection();
Ships.ForEach(sh => temp.Add(sh));
Passages.ForEach(ps => temp.Add(ps));
MyCompositeCollection = temp;
有趣的想法。可能需要添加一件事,例如显示如何将
TemplateSelector
中的内容连接到Xaml中的列表框中会很有帮助。我指出了TemplateSelector等关键字。您可以查找的所有内容都是这样的。如果已经有这样的例子,我想避免复制和粘贴。谢谢你的回答。遗憾的是,我只能将其中一个答案标记为正确。有趣的想法。可能需要添加一件事,例如显示如何将TemplateSelector
中的内容连接到Xaml中的列表框中会很有帮助。我指出了TemplateSelector等关键字。您可以查找的所有内容都是这样的。如果已经有这样的例子,我想避免复制和粘贴。谢谢你的回答。遗憾的是,我只能将其中一个答案标记为正确。很好的解释!我没有提到我不能更改示例中提到的类,因为我从WebAPI“继承”了它们。但是我当然可以从字符串列表中创建新的类。@Shamshiel不要忘记,可以使用WebAPI
类中的Partial
类,实际上可以根据需要扩展属性。很好的解释!我没有提到我不能更改示例中提到的类,因为我从WebAPI“继承”了它们。但是我当然可以从字符串列表中创建新的类。@Shamshiel不要忘记,可以使用WebAPI
类中的Partial
类,实际上可以根据需要扩展属性。