Работаю с WPF с применением паттерна MVVM. Столкнулся с проблемой, создал UserControl(далее UC) один общий который будет несколько раз использоваться:
<UserControl x:Class="RecruiterWPF.View.UCSkypeView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:RecruiterWPF.View"
xmlns:viewModel="clr-namespace:RecruiterWPF.ViewModel"
mc:Ignorable="d"
d:DesignHeight="200" d:DesignWidth="300">
<Grid>
<Border BorderBrush="Black" BorderThickness="1" >
<Grid Background="White" VerticalAlignment="Center" Margin="5,0">
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"></ColumnDefinition>
<ColumnDefinition Width="70"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="Логин аккаунта" Grid.Row="0" Grid.Column="0" />
<TextBlock Text="{Binding LoginSkype}" Grid.Row="0" Grid.Column="1" TextAlignment="Center" VerticalAlignment="Center" />
<TextBlock Text="Отправлено заявок в друзья" Grid.Row="1" Grid.Column="0" TextWrapping="Wrap" />
<TextBlock Text="{Binding SkypeId}" Grid.Row="1" Grid.Column="1" TextAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Text="Создано диалогов" Grid.Row="2" Grid.Column="0" TextWrapping="Wrap"/>
<TextBlock Text="{Binding DialogOnLabel}" Grid.Row="2" Grid.Column="1" TextAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Text="Положительные цепочки" Grid.Row="3" Grid.Column="0" TextWrapping="Wrap"/>
<TextBlock Text="{Binding PositiveOnLabel}" Grid.Row="3" Grid.Column="1" TextAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Text="Отрицательные цепочки" Grid.Row="4" Grid.Column="0" TextWrapping="Wrap"/>
<TextBlock Text="{Binding NegativeOnLabel}" Grid.Row="4" Grid.Column="1" TextAlignment="Center" VerticalAlignment="Center"/>
<StackPanel Grid.Row="5" Grid.ColumnSpan="2" Grid.Column="0" Orientation="Horizontal">
<Button Command="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type ListBox}}, Path=DataContext.(viewModel:SkypeViewModel.EditCommand)}" Width="50">И</Button>
<Button Command="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type ListBox}}, Path=DataContext.(viewModel:SkypeViewModel.SaveCommand)}" Width="50">C</Button>
<Button Command="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type ListBox}}, Path=DataContext.(viewModel:SkypeViewModel.DeleteCommand)}" Width="50">У</Button>
</StackPanel>
</Grid>
</Border>
</Grid>
</UserControl>
На форме данный UserControl я вызываю в Listbox
<ListBox x:Name="SkLb" ItemsSource="{Binding Skypes}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" SelectedItem="{Binding SelectedSkype}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel IsItemsHost="True" Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate >
<DataTemplate>
<local:UCSkypeView></local:UCSkypeView>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Всё верно я получаю так и должно быть(на дизайн не обращайте внимание я сейчас думаю о функциональности,И-изменить,С-сохранить,У-удалить).
Вот в чём проблема, как мне работать с одним UserControl-ом. Мне нужно чтобы при нажатии кнопки "И" в конкретном UC, данная кнопка становилась IsEnabled=false, а другие две становились активными(сейчас на скрине они активны), а при сохранение или удаление кнопки либо менялись снова либо удалялась UC с формы.
EditCommand = new RelayCommand(Edit,CanEdit);
Пробовал так менять состояние кнопки, но так меняются состояние всех кнопок, на всех UC. Что я делаю неправильно, направьте меня в нужном русле.
Можно объединить контролы в одной сетке и проходиться по всем, меняя свойство на True. Пример:
private void Mouse_Down(object sender, MouseButtonEventArgs e)
{
IsEnabled = true;
DependencyObject parent = VisualTreeHelper.GetParent(this);
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
{
var child = VisualTreeHelper.GetChild(parent, i);
if (!this.Equals(child))
try
{
(child as MyControl).IsEnabled = false;
}
catch { }
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Чтоб к каждому члену этого списка соотвецвовало 2 переменные byte и 2 string
Нашел вот такой тест:
Как правильно оформить select-запрос в SQL, который берет только последнею запись со столбца finished?