рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдХреЗ рд▓рд┐рдП рдЦреЛрдЬрдХрд░реНрддрд╛ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВ

рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдХреЗ рд▓рд┐рдП рдЦреЛрдЬрдХрд░реНрддрд╛ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВ



рдЪреВрдВрдХрд┐ рд▓реЛрдЧ рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдкрд░ рд▓реЗрдЦреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред рдереЛрдбрд╝рд╛ рдХреЛрдб рд╣реЛрдЧрд╛ (рд╕рднреА рдХреЛрдб GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ )ред

рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдореБрдЭреЗ рджреЗрд╢реА рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдореЗрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдкрд░реНрдХ рдЦреЛрдЬ рдирд┐рдпрдВрддреНрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдореБрдЭреЗ рддреИрдпрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдмрдирд╛рдирд╛ рдкрдбрд╝рд╛ред (рдореИрдВ рдСрдЯреЛ-рдкреВрд░реНрдгрддрд╛ рдХреЗ рд╕рд╛рде рдХреЙрдореНрдмреЛрдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдерд╛ рдФрд░ рдореВрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рдм рдХреБрдЫ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП)





рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рд╕реЗ - рдЙрдкрд╕реНрдерд┐рддрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд┐рд▓рдВрдмрд┐рдд рдЦреЛрдЬ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЗрдм рд╕реЗрд╡рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп)ред рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред
рдпреЛрдЬрдирд╛рдмрджреНрдз рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА:


рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрдпрдирд┐рдд рд╕рдВрдкрд░реНрдХ рд╕реВрдЪреА рдмреЙрдХреНрд╕ рдореЗрдВ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЕрдХреНрд╖рд░реЛрдВ рдХреЛ рджрд░реНрдЬ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЯреЗрдХреНрд╕реНрдЯрдмреЙрдХреНрд╕ рднреА рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЦреЛрдЬреЗ рдЧрдП рдХрд╛рдВрдЯреИрдХреНрдЯ рдореЗрдВ рдиреАрдЪреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдкрд░реНрдХреЛрдВ рдХреА рдЦреЛрдЬ рдХреА рдЬрд╛рддреА рд╣реИред рдбрд┐рд▓реАрдЯ рдмрдЯрди рднреА рд╕рдорд░реНрдерд┐рдд рд╣реИ (рдпрджрд┐ рдкрд╛рда рдмреЙрдХреНрд╕ рдореЗрдВ рдЕрдзрд┐рдХ рдЕрдХреНрд╖рд░ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЕрдВрддрд┐рдо рдЪрдпрдирд┐рдд рдЖрдЗрдЯрдо рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)
рдпрд╣ рдХреЛрдб рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

Xaml рддрддреНрд╡ рдХреЛрдб
<Grid> <Grid.RowDefinitions> <RowDefinition Height="*" MaxHeight="70" /> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <ListBox x:Name="ItemsListBox" ItemTemplate="{TemplateBinding ItemTemplate}" SelectionMode="Single"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <toolkit:WrapPanel /> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ContentControl x:Name="Header" Content="{TemplateBinding HeaderText}" ContentTemplate="{TemplateBinding HeaderTemplate}" /> <TextBox x:Name="SearchTextBox" Background="Transparent" BorderBrush="Transparent" CaretBrush="WhiteSmoke" FontFamily="{TemplateBinding FontFamily}" FontSize="{TemplateBinding FontSize}" FontStyle="{TemplateBinding FontStyle}" Foreground="{TemplateBinding Foreground}" Style="{StaticResource ClearTextBoxStyle}"/> </ListBox> <Border Grid.Row="1" Width="480" Height="2" VerticalAlignment="Top" Background="White" /> <ListBox x:Name="Selector" Grid.Row="2" HorizontalAlignment="Stretch" Background="{TemplateBinding PopupBackground}" BorderBrush="{TemplateBinding PopupBorderBrush}" BorderThickness="{TemplateBinding PopupBorderThickness}" FontFamily="{TemplateBinding FontFamily}" FontSize="{TemplateBinding FontSize}" FontStyle="{TemplateBinding FontStyle}" FontWeight="{TemplateBinding FontWeight}" Foreground="{TemplateBinding Foreground}" IsTabStop="False" ItemTemplate="{TemplateBinding PopupItemTemplate}" Opacity="{TemplateBinding Opacity}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" SelectionMode="Single" /> </Grid> 



рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:


рдХреЛрдб:
рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
 <controls2:ContactsChooser x:Name="chooser" Grid.Row="1" Margin="0,24,0,0" HeaderText="Partipants" ItemsSource="{Binding InvitedUsers}" PopupBackground="Transparent" PopupBorderBrush="Transparent" SearchCommand="{Binding SearchCommand}" SearchItemsSource="{Binding SearchedUsers}"> <controls2:ContactsChooser.HeaderTemplate> <DataTemplate> <TextBlock Margin="0,0,12,0" FontFamily="Segoe WP Semibold" FontSize="20" Foreground="Gray" Text="{Binding}" /> </DataTemplate> </controls2:ContactsChooser.HeaderTemplate> <controls2:ContactsChooser.PopupItemTemplate> <DataTemplate> <Grid Margin="0,0,0,12"> <Grid.ColumnDefinitions> <ColumnDefinition Width="99" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Canvas Width="99" Height="99" HorizontalAlignment="Left" VerticalAlignment="Top" Background="#FF0A1016" UseLayoutRounding="False"> <Path Canvas.Left="8" Canvas.Top="10" Width="83" Height="97" Data="F1M81.886,88.911L81.989,88.911C81.989,88.911,81.964,89.135,81.887,88.915z M36.533,88.911L46.325,88.911 44.515,88.935C41.769,88.955,38.229,88.924,36.59,88.911z M41.727,39.437C41.727,39.437 47.627,45.341 47.627,45.341 47.627,45.341 41.727,75.253 41.727,75.253 41.727,75.253 35.827,45.341 35.827,45.341 35.827,45.341 41.727,39.437 41.727,39.437z M55.337,39.02C61.072,39.02 65.137,39.02 65.137,39.02 71.971,39.02 76.42,45.063 77.511,51.66 77.511,51.66 79.541,65.1 80.963,81.029 81.386,85.766 81.643,87.737 81.793,88.523L81.886,88.911 46.325,88.911 46.383,88.91C47.474,88.886 48.198,88.845 48.218,88.779 49.761,83.805 51.266,75.913 52.317,67.729 54.112,53.747 55.199,39.02 55.337,39.02z M18.236,39.02C18.236,39.02 22.18,39.02 27.997,39.02 28.199,39.02 34.143,88.906 35.759,88.906L36.533,88.911 1.013,88.911C1.013,88.911 5.862,51.66 5.862,51.66 6.71,44.699 11.402,39.02 18.236,39.02z M41.578,1.981C50.442,1.981 57.627,9.172 57.627,18.042 57.627,26.913 50.442,34.104 41.578,34.104 32.715,34.104 25.53,26.913 25.53,18.042 25.53,9.172 32.715,1.981 41.578,1.981z" Fill="#3A3F43" /> </Canvas> <Image Width="99" Height="99" /> <TextBlock Grid.Column="1" Margin="12,0,0,0" VerticalAlignment="Center" Text="{Binding FullName}" /> </Grid> </DataTemplate> </controls2:ContactsChooser.PopupItemTemplate> <controls2:ContactsChooser.ItemTemplate> <DataTemplate> <StackPanel Margin="0,0,12,0" Orientation="Horizontal"> <TextBlock Text="{Binding FullName}" /> <TextBlock Text=";" /> </StackPanel> </DataTemplate> </controls2:ContactsChooser.ItemTemplate> </controls2:ContactsChooser> 


MVVM рдкреИрдЯрд░реНрди рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдЦреЛрдЬ рддрд░реНрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ ViewModel рдореЗрдВ рд╣реИ:

 SearchCommand = new RelayCommand(o => { var searchedName = o.ToString().ToLower(); SearchedUsers.Clear(); foreach (var user in Users.Where(u => u.FirstName.ToLower().Contains(searchedName) || u.LastName.ToLower().Contains(searchedName))) { SearchedUsers.Add(user); } }); 


рдпрд╣рд╛рдВ рдЖрдк рд╡реЗрдм рд╕реЗрд╡рд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рд╡рд┐рдзрд┐ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдХреЙрд▓реЗрдХреНрд╢рди рдореЗрдВ рднрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреЛрдб рд╕рд╛рдл рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди OpenSource рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕реБрдзрд╛рд░реЗрдВред

рдЕрдЧрд░ рдЕрдЪрд╛рдирдХ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ - рдкреВрдЫреЗрдВ, рдореБрдЭреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

Source: https://habr.com/ru/post/In196324/


All Articles