Рейтинг:
2
TheRealSteveJudge
Я не знаю, как определяется ваш список ролей.
Может быть, этот пример может привести вас в правильном направлении:
public class Role
{
public string Name { get; set; }
public string Type { get; set; }
}
И ваша ObservableCollection определяется следующим образом
private ObservableCollection<Role> roleList;
public ObservableCollection<Role> RoleList
{
get { return roleList; }
set
{
if (roleList == value) return;
roleList = value;
OnPropertyChanged();
}
}
Затем вы можете отобразить свою коллекцию в списке.
Вы должны использовать DataTemplate.
<ListBox ItemsSource="{Binding RoleList}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Name}"></TextBlock>
<TextBlock Grid.Column="1" Text="{Binding Type}"></TextBlock>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Один только текстовый блок не может отображать коллекцию.
Лучше было бы использовать DataGrid.
<DataGrid ItemsSource="{Binding RoleList}"
AutoGenerateColumns="False"
HeadersVisibility="Column"
CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="Name"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="*">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="Type"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Type}"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Если вы хотите иметь что-то вроде новостного тикера, вам нужен конвертер значений
для вашего оригинального решения холста.
namespace WpfApplicationTest1.Converters
{
public class ListConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var roles = value as ObservableCollection<Role>;
if (roles != null)
{
var stringBuilder = new StringBuilder();
foreach (var role in roles)
{
stringBuilder.Append($"{role.Name} {role.Type}");
}
return stringBuilder.ToString();
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
По вашему мнению, вы должны использовать конвертер значений следующим образом.
Добавьте это в раздел пространства имен вашего окна:
xmlns:local="clr-namespace:WpfApplicationTest1"
<TextBlock Text="{Binding RoleList, Converter={StaticResource ListConverter}}" FontSize="25" Name="tbmarquee" Canvas.Top="25" Width="1346"
RenderTransformOrigin="0.465,0.524" />
ThabetMicrosoft
Танск для вас ответ,
Мне очень жаль, если мой пост не совсем ясен.
На самом деле, да, именно так, у меня есть коллекция элементов, которые я помещаю в них оба с помощью полосы прокрутки, чтобы прокрутить ее, показывая один или несколько элементов одновременно (5 или 10 одновременно)
На самом деле я хочу, чтобы объекты из коллекции прокручивались на холсте (или, если есть другие предложения лучше, чем холст), как полоса прокрутки новостей в CNN или SkyNews ...
Я попробовал простой текст (не элемент из коллекции) , и он хорошо прокручивается на холсте :
Для написания вручную текста все в порядке, это прокрутка, но для элементов из коллекции я не знаю, как это сделать? Есть предложения?
Спасибо,
TheRealSteveJudge
Может быть, Датагрид - это то, что вам нужно.
Он также показывает вертикальную полосу прокрутки, если это необходимо.
Пожалуйста, смотрите обновленное решение.
ThabetMicrosoft
Большое спасибо за вашу помощь,
может быть, Датагрид - это другой выбор..Но могу ли я сделать прокрутку с этим форматом:
Имя : Тип * * * Имя : Тип * * * Имя : Тип (с прокруткой)
Надеюсь, вы понимаете мой объектив?
пожалуйста, посоветуйте мне правильный выбор или приблизительный для него
TheRealSteveJudge
Вы имеете в виду горизонтальную прокрутку? Как новостной тикер?
ThabetMicrosoft
да ! что это именно который я хочу..
Любое предложение сделать это с привязкой к Observblecollection
TheRealSteveJudge
Хотите ли вы объединить все элементы ObservableCollection только в одну строку?
ThabetMicrosoft
На самом деле у меня в классе есть два столбца: Message и Datetime,
и я хочу прокрутить per exemple 5 из таблицы в таком формате:
Message1: DateTile1 * * * Message2: DateTile2 *** Message2: DateTile2 ..
Да, чтобы сделать все эти элементы только одной строкой ,
( string =string1 + string2+string3) (string1: Message1: DateTile1 ***; ...)
TheRealSteveJudge
Пожалуйста, взгляните на обновленное решение.
ThabetMicrosoft
Большое спасибо за вашу попытку,
но извини, что я обманулся .. Я не недооцениваю ваш код обновления..
во-первых, нам не нужна Датагрид ?
код : описание:местная="среды CLR-пространство имен:WpfApplicationTest1" это в мой файл XMAL, я префиксом xmlns:местные="среды CLR-пространство имен:WPFAuthentification.HelperClasses"
И у меня есть Eroor в ligne : stringBuilder.Функции append($"{роль.имя} {роль.идентификатор}");
TheRealSteveJudge
Не сдавайся. Просто попробуйте мой предложенный код.
ThabetMicrosoft
да, я стараюсь ..К сожалению в ListConverter общественных классов : в разделе ivalueconverter {...}
это в XAML. cs или в ViewModel?
TheRealSteveJudge
Это собственный класс с именем ListConverter.cs в подпапках конвертеров.
Поэтому он имеет пространство имен WpfApplicationTest1.Конвертеры
Может быть, ты попробуешь что-нибудь другое.
Я только что нашел здесь: http://www.jarloo.com/rumormill4/
Это проект новостей.
ThabetMicrosoft
ладно, хорошо, я понимаю..Это очень хороший проект. Я постараюсь, как это для начала
я хотел бы очень поблагодарить вас за вашу помощь и поддержку
TheRealSteveJudge
Пожалуйста.
ThabetMicrosoft
** У меня есть ошибка : "impoosible to reeolve The ListConverter "
может быть, проблема в ligne: xmlns:local= "clr-namespace:WpfApplicationTest1", потому что у меня есть для продвижения этого в моем XAML:
< Window x: Class= " Wpfauthentication.Вид.NewUserView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
описание:х="http://schemas.microsoft.com/winfx/2006/xaml"
описание:МС="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns: local= " clr-пространство имен:Wpfauthentication.HelperClasses"
....