SearchBar command support
This commit is contained in:
1 parent
a92a3ce82d
commit
7c331c1e60
5 files changed
+84
-2
No files matched your search
@@ -7,7 +7,7 @@ using HandyControl.Interactivity;
|
|||||||
|
|
||||||
namespace HandyControl.Controls
|
namespace HandyControl.Controls
|
||||||
{
|
{
|
||||||
public class SearchBar : TextBox
|
public class SearchBar : TextBox, ICommandSource
|
||||||
{
|
{
|
||||||
public SearchBar()
|
public SearchBar()
|
||||||
{
|
{
|
||||||
@@ -51,6 +51,16 @@ namespace HandyControl.Controls
|
|||||||
{
|
{
|
||||||
Info = Text
|
Info = Text
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (Command == null) return;
|
||||||
|
if (Command is RoutedCommand command)
|
||||||
|
{
|
||||||
|
command.Execute(CommandParameter, CommandTarget);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Command.Execute(CommandParameter);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -67,5 +77,54 @@ namespace HandyControl.Controls
|
|||||||
get => (bool)GetValue(IsRealTimeProperty);
|
get => (bool)GetValue(IsRealTimeProperty);
|
||||||
set => SetValue(IsRealTimeProperty, value);
|
set => SetValue(IsRealTimeProperty, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static readonly DependencyProperty CommandProperty = DependencyProperty.Register(
|
||||||
|
"Command", typeof(ICommand), typeof(SearchBar), new PropertyMetadata(default(ICommand), OnCommandChanged));
|
||||||
|
|
||||||
|
private static void OnCommandChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||||
|
{
|
||||||
|
var ctl = (SearchBar)d;
|
||||||
|
if (e.OldValue is ICommand oldCommand)
|
||||||
|
{
|
||||||
|
oldCommand.CanExecuteChanged -= ctl.CanExecuteChanged;
|
||||||
|
}
|
||||||
|
if (e.NewValue is ICommand newCommand)
|
||||||
|
{
|
||||||
|
newCommand.CanExecuteChanged += ctl.CanExecuteChanged;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICommand Command
|
||||||
|
{
|
||||||
|
get => (ICommand) GetValue(CommandProperty);
|
||||||
|
set => SetValue(CommandProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly DependencyProperty CommandParameterProperty = DependencyProperty.Register(
|
||||||
|
"CommandParameter", typeof(object), typeof(SearchBar), new PropertyMetadata(default(object)));
|
||||||
|
|
||||||
|
public object CommandParameter
|
||||||
|
{
|
||||||
|
get => GetValue(CommandParameterProperty);
|
||||||
|
set => SetValue(CommandParameterProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly DependencyProperty CommandTargetProperty = DependencyProperty.Register(
|
||||||
|
"CommandTarget", typeof(IInputElement), typeof(SearchBar), new PropertyMetadata(default(IInputElement)));
|
||||||
|
|
||||||
|
public IInputElement CommandTarget
|
||||||
|
{
|
||||||
|
get => (IInputElement) GetValue(CommandTargetProperty);
|
||||||
|
set => SetValue(CommandTargetProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CanExecuteChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (Command == null) return;
|
||||||
|
|
||||||
|
IsEnabled = Command is RoutedCommand command
|
||||||
|
? command.CanExecute(CommandParameter, CommandTarget)
|
||||||
|
: Command.CanExecute(CommandParameter);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -359,6 +359,7 @@
|
|||||||
<Compile Include="ViewModel\Common\ComboBoxDemoViewModel.cs" />
|
<Compile Include="ViewModel\Common\ComboBoxDemoViewModel.cs" />
|
||||||
<Compile Include="ViewModel\Controls\CoverViewModel.cs" />
|
<Compile Include="ViewModel\Controls\CoverViewModel.cs" />
|
||||||
<Compile Include="ViewModel\Controls\DialogDemoViewModel.cs" />
|
<Compile Include="ViewModel\Controls\DialogDemoViewModel.cs" />
|
||||||
|
<Compile Include="ViewModel\Controls\SearchBarDemoViewModel.cs" />
|
||||||
<Compile Include="ViewModel\DemoViewModelBase!1.cs" />
|
<Compile Include="ViewModel\DemoViewModelBase!1.cs" />
|
||||||
<Compile Include="ViewModel\Main\ContributorsViewModel.cs" />
|
<Compile Include="ViewModel\Main\ContributorsViewModel.cs" />
|
||||||
<Compile Include="ViewModel\Controls\GrowlDemoViewModel.cs" />
|
<Compile Include="ViewModel\Controls\GrowlDemoViewModel.cs" />
|
||||||
|
|||||||
@@ -3,11 +3,12 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:controls="clr-namespace:HandyControl.Controls;assembly=HandyControl"
|
xmlns:controls="clr-namespace:HandyControl.Controls;assembly=HandyControl"
|
||||||
xmlns:langs="clr-namespace:HandyControlDemo.Properties.Langs"
|
xmlns:langs="clr-namespace:HandyControlDemo.Properties.Langs"
|
||||||
|
DataContext="{Binding SearchBarDemo,Source={StaticResource Locator}}"
|
||||||
Background="{DynamicResource RegionBrush}">
|
Background="{DynamicResource RegionBrush}">
|
||||||
<controls:TransitioningContentControl>
|
<controls:TransitioningContentControl>
|
||||||
<StackPanel Margin="32" Orientation="Horizontal">
|
<StackPanel Margin="32" Orientation="Horizontal">
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<controls:SearchBar/>
|
<controls:SearchBar Command="{Binding SearchCmd}" CommandParameter="{Binding Text,RelativeSource={RelativeSource Self}}"/>
|
||||||
<controls:SearchBar Margin="0,32,0,0" IsEnabled="False"/>
|
<controls:SearchBar Margin="0,32,0,0" IsEnabled="False"/>
|
||||||
|
|
||||||
<controls:SearchBar controls:InfoElement.Title="{x:Static langs:Lang.TitleDemoStr1}" Margin="0,32,0,0" Style="{StaticResource SearchBarExtend}"/>
|
<controls:SearchBar controls:InfoElement.Title="{x:Static langs:Lang.TitleDemoStr1}" Margin="0,32,0,0" Style="{StaticResource SearchBarExtend}"/>
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
using System;
|
||||||
|
using GalaSoft.MvvmLight;
|
||||||
|
using GalaSoft.MvvmLight.Command;
|
||||||
|
using HandyControl.Controls;
|
||||||
|
|
||||||
|
namespace HandyControlDemo.ViewModel
|
||||||
|
{
|
||||||
|
public class SearchBarDemoViewModel : ViewModelBase
|
||||||
|
{
|
||||||
|
public RelayCommand<string> SearchCmd => new Lazy<RelayCommand<string>>(() =>
|
||||||
|
new RelayCommand<string>(Search)).Value;
|
||||||
|
|
||||||
|
private void Search(string key)
|
||||||
|
{
|
||||||
|
Growl.Info(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -25,6 +25,7 @@ namespace HandyControlDemo.ViewModel
|
|||||||
SimpleIoc.Default.Register<ChatBoxViewModel>();
|
SimpleIoc.Default.Register<ChatBoxViewModel>();
|
||||||
SimpleIoc.Default.Register<CoverViewModel>();
|
SimpleIoc.Default.Register<CoverViewModel>();
|
||||||
SimpleIoc.Default.Register<DialogDemoViewModel>();
|
SimpleIoc.Default.Register<DialogDemoViewModel>();
|
||||||
|
SimpleIoc.Default.Register<SearchBarDemoViewModel>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ViewModelLocator Instance => new Lazy<ViewModelLocator>(() =>
|
public static ViewModelLocator Instance => new Lazy<ViewModelLocator>(() =>
|
||||||
@@ -54,6 +55,8 @@ namespace HandyControlDemo.ViewModel
|
|||||||
|
|
||||||
public DialogDemoViewModel DialogDemo => ServiceLocator.Current.GetInstance<DialogDemoViewModel>();
|
public DialogDemoViewModel DialogDemo => ServiceLocator.Current.GetInstance<DialogDemoViewModel>();
|
||||||
|
|
||||||
|
public SearchBarDemoViewModel SearchBarDemo => ServiceLocator.Current.GetInstance<SearchBarDemoViewModel>();
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user