Command 에 인자로 두가지 항목을 던지고자 할때
이를 class 로 정의하여 CommandParameter 로 던질수 있다.
먼저 프로젝트에 Prism.Wpf Nuget Package 를 설치한다.
이제 Class 구조를 잡는다.
(string, object 로 구성)
[StringObject.cs]
namespace MultiValueConverterSample { public class StringObject { /// <summary> /// 문자열 데이터입니다. /// </summary> public string StringData;
/// <summary> /// 오브젝트 데이터입니다. /// </summary> public object ObjectData;
/// <summary> /// 생성자입니다. /// </summary> /// <param name="stringData">문자열 데이터입니다.</param> /// <param name="objectData">오브젝트 데이터입니다.</param> public StringObject(string stringData, object objectData) { this.StringData = stringData; this.ObjectData = objectData; } } }
|
IMultiValueConverter 를 정의한다.
(화면에서 처리된 두개의 인자를 가지고 위에서 만들 Class 구조로 변환해 리턴)
[StringObjectConverter.cs]
using System; using System.Globalization; using System.Windows.Data;
namespace MultiValueConverterSample { public class StringObjectConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { return new StringObject(values[0].ToString(), values[1]); }
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } }
|
화면에 아래 처럼 구성한다.
(조회 버튼을 클릭하면 StringObjectCommand 를 실행해
입력한 값을 string 으로 버튼 객체를 object 로 하여 CommandParameter 로 사용한다.)
[MainWindow.xaml]
<Window x:Class="MultiValueConverterSample.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:MultiValueConverterSample" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Window.Resources> <local:StringObjectConverter x:Key="StringObjectConverter" /> </Window.Resources> <Grid> <StackPanel> <TextBox Name="contentTextBlock" Width="100" Height="30" Margin="10"/> <Button Name="searchButton" Content="조회" Margin="10" Height="30" Width="100" Command="{Binding StringObjectCommand}"> <Button.CommandParameter> <MultiBinding Converter="{StaticResource StringObjectConverter}"> <Binding ElementName="contentTextBlock" Path="Text" /> <Binding ElementName="searchButton" /> </MultiBinding> </Button.CommandParameter> </Button> </StackPanel> </Grid> </Window>
|
코드비하인드 단에서는 아래 처럼 처리한다.
(반드시 this.DataContext = this; 을 해야 Command 가 처리된다.)
[MainWindow.xaml.cs]
using Prism.Commands;
using System.Windows; using System.Windows.Input;
namespace MultiValueConverterSample { /// <summary> /// MainWindow.xaml에 대한 상호 작용 논리 /// </summary> public partial class MainWindow : Window { #region StringObjectCommand
/// <summary> /// StringObjectCommand /// </summary> public ICommand StringObjectCommand { get { if (stringObjectCommand == null) { stringObjectCommand = new DelegateCommand<StringObject>((stringObject) => { string stringData = stringObject.StringData; object objectData = stringObject.ObjectData; }); } return stringObjectCommand; } } private DelegateCommand<StringObject> stringObjectCommand;
#endregion
public MainWindow() { InitializeComponent();
this.DataContext = this; } } }
|
조회 버튼을 누르게 되면 Command 에서 아래 처럼 해당 항목이 넘어온것을 확인할 수 있다.
'C# > WPF' 카테고리의 다른 글
[WPF] DataContext 의 특정 Command 를 실행하는 코드 (0) | 2020.08.21 |
---|---|
[WPF] 이미지를 Rect 기준으로 잘라내는 함수 (0) | 2020.08.20 |
[WPF] ContextMenu 선택 후 ContextMenu 숨겨지지 않게 하기 (0) | 2020.08.03 |
[WPF] Image 붙이기 (0) | 2020.07.27 |
[WPF] Image 에 코드로 이미지 경로 지정하기 (0) | 2020.07.27 |