SelectedItem
SelectionChanged
/// <summary>
/// Selected Language
/// </summary>
public Lang Language
{
get => new(App.Language);
set
{
if (value == null) { return; }
if (App.Language.Equals(value.Culture)) { return; }
App.Language = value.Culture;
RaisePropertyChanged(nameof(Language));
}
}
/// <summary>
/// Language values list
/// </summary>
public ObservableCollection<Lang> Languages
{
get => _Languages;
set
{
_Languages = value;
RaisePropertyChanged(nameof(Languages));
}
}
<!-- Language select -->
<Controls:ComboBoxEx
Grid.Row="1"
Grid.Column="1"
Grid.ColumnSpan="3"
Margin="2,2,4,2"
Padding="10,5"
HorizontalAlignment="Right"
VerticalAlignment="Center"
ItemsSource="{Binding AppVM.LangVM.Languages,
Mode=OneWay,
UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding AppVM.LangVM.Language,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}" />
<!-- Список файлов и директорий -->
<ListView x:Name="DirectoryDataEntitiesList" ItemsSource="{Binding DirectoryDataEntities}" Margin="10,85,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Height="190" Width="210">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding SelectDirectoryCommand}" CommandParameter="{Binding SelectedItem, ElementName=DirectoryDataEntitiesList}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<ListView.View>
<GridView>
<GridViewColumn Header="Имя директории" Width="135" DisplayMemberBinding="{Binding DirectoryName}"/>
<GridViewColumn Header="Выбрать" Width="65">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Stretch">
<CheckBox IsChecked="{Binding IsChoised}" HorizontalAlignment="Center" IsEnabled="False"/>
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
<Button Command="{Binding CurrentDirectories}" Margin="10, 280, 0, 0" Height="25" Width="210" Content="Текущие папки" HorizontalAlignment="Left" VerticalAlignment="Top"/>
<ListView x:Name="FileDatasList" ItemsSource="{Binding FileDatas}" Margin="250,85,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Height="219" Width="210">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding SelectFileCommand}" CommandParameter="{Binding SelectedItem, ElementName=FileDatasList}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<ListView.View>
<GridView>
<GridViewColumn Header="ID" Width="50" DisplayMemberBinding="{Binding ID}" />
<GridViewColumn Header="Имя файла" Width="150" DisplayMemberBinding="{Binding FileName}"/>
</GridView>
</ListView.View>
</ListView>
public ICommand SelectFileCommand { get; }
public ICommand SelectDirectoryCommand { get; }
public EntryWindowViewModel()
{
SelectFileCommand = new RelayCommand(SelectFile);
SelectDirectoryCommand = new RelayCommand(SelectDirectory);
}
private void SelectFile(object parameter)
{
try
{
MessageBox.Show("^^^^");
}
catch (Exception e)
{
MessageBox.Show("Возникла неустранимая ошибка:\n" + e.Message + "\n\nСообщите о проблеме разработчику.");
}
}
private void SelectDirectory(object parameter)
{
try
{
MessageBox.Show("$$$*");
}
catch (Exception e)
{
MessageBox.Show("Возникла неустранимая ошибка:\n" + e.Message + "\n\nСообщите о проблеме разработчику.");
}
}
public class RelayCommand : ICommand
{
private readonly Action<object> _execute;
private readonly Func<object, bool> _canExecute;
public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)
{
_execute = execute ?? throw new ArgumentNullException(nameof(execute));
_canExecute = canExecute;
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public bool CanExecute(object parameter)
{
return _canExecute == null || _canExecute(parameter);
}
public void Execute(object parameter)
{
_execute(parameter);
}
}
public class Lang(CultureInfo culture)
{
public CultureInfo Culture { get; set; } = culture;
public string FullName { get; set; } = culture.EnglishName + " / " + culture.NativeName;
public override bool Equals(object obj)
{
if (obj is Lang lang)
{
return Culture.LCID == lang.Culture.LCID;
}
else if (obj is CultureInfo culture)
{
return Culture.LCID == culture.LCID;
}
return Culture.Equals(obj);
}
public override int GetHashCode()
{
return 213191193 + EqualityComparer<CultureInfo>.Default.GetHashCode(Culture);
}
public override string ToString()
{
return FullName;
}
}
private Lang _Language;
private ObservableCollection<Lang> _Languages;
public Lang Language
{
get => _Language;
set
{
if (value == null) { return; }
_Language = value;
RaisePropertyChanged(nameof(Language));
}
}
public ObservableCollection<Lang> Languages
{
get => _Languages;
set
{
_Languages = value;
RaisePropertyChanged(nameof(Languages));
}
}
<ComboBox
ItemsSource="{Binding AppVM.LangVM.Languages,
Mode=OneWay,
UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding AppVM.LangVM.Language,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}" />