์ผ๋ฐ์ ์ผ๋ก RelayCommand๋ ICommand ํ๋กํผํฐ๋ฅผ ์ ์ธํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์
๋๋ค.
public ICommand SaveCommand { get; init }
public MainViewModel()
{
SaveCommand = new RelayCommand<string>(Save);
}
private void Save(string value)
{
}
๊ทธ๋ฆฌ๊ณ CommunityToolkit.Mvvm ํจํค์ง์์๋ Attribute๋ฅผ ํตํด ์กฐ๊ธ ๋ ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
[RelayCommand]
private void Save(string value)
{
}
๋ณด์๋ ๊ฒ์ฒ๋ผ RelayCommand Attribute๋ฅผ ์ ์ธํ๋ฉด ๋ณ๋์ ํ๋กํผํฐ์ RelayCommand ์ธ์คํด์ค ์์ฑ ์์ด๋ ๋ฐ๋ก ๋ฉ์๋๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ ํ ์ถ๊ฐ์ ์ธ ์์ค์ฝ๋ ์์ด๋ ๋ง์ด์ฃ .
Xaml์์๋ ๊ทธ์ SaveCommand๋ฅผ ๋ฐ์ธ๋ฉ ํด์ฃผ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
(๋จ ๋ฉ์๋์ Command ๋จ์ด๋ฅผ ๋ฐ๋์ ๋ถ์ฌ์ผ ํฉ๋๋ค.)
<Button Command="{Binding SaveCommand}"/>
์ด๋ ๊ฒ ํ์ฌ CommunityToolkit.Mvvm์ ํตํ RelayCommand Attribute ์ฌ์ฉ ๋ฐฉ์์ ๋ํด ์์๋ณด์์ต๋๋ค.
์ฝ์ด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.

16๊ฐ์ ์ข์์
suwoo
2
์ข์ ํ ๊ฐ์ฌํฉ๋๋ค.
์ ์ ๋ Attribute๊ฐ ์ ๋์ง ํด์ ๋ดค๋๋,
Community.Toolkit.Mvvm์ด ์๋๋ผ
Microsoft.Toolkit.Mvvm ์ด์๋๊ตฐ์ ( ๊ตฌ ๋ฒ์ , Obsolete ).
ํจํค์ง ๊ต์ฒดํ๊ณ ๋ณด๋ ์ ๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋จ, ์๋ ์์ฑ๋ partial Class๋๋ฌธ์ partial ์ ์ธ์ ๋ค์ ์ถ๊ฐ ํด์ค์ผ ํ๋ค์ ใ
[โฆ].g.cs ํ์ผ์ด ์์ฑ๋๋๊ฑธ ํ์ธํ์ต๋๋ค.
2๊ฐ์ ์ข์์
@suwoo ์ ๋์์ด ๋์
จ๋ค๋ ๋คํ์
๋๋ค!!
2๊ฐ์ ์ข์์
๊ตฌ๋ฒ์ (Microsoft.Toolki)์์๋ [ICommand]
๋ก ํ์๋ฉด ๋ฉ๋๋ค๋ง
(๊ตฌ๋ฒ์ ์์๋ partial ์ ํ์!)
๊ตฌ๋ฒ์ ์์๋ ๋ญ๊ฐ ์ดํดํ ์ ์๋ ๋ฌธ์ ๊ฐ ์ค์ค ๋จ์ด์ ธ์
๊ฒฐ๊ตญ Community.Toolkit
์ผ๋ก ๊ฐ์ํ์ด๋ค.
Community.Toolkit
์ผ๋ฃจ ๋๋๋จ๊ฒฐ! ใ
ใ
ใ
3๊ฐ์ ์ข์์
Stupid
5
Community.Toolkit.Core
, Community.Toolkit.Maui
๋ ์์ต๋๋ค.
ํผ๋ํ์๋ ์ผ ์๊ธธ ๋ฐ๋๋๋ค. (Community.Toolkit.Maui ๊ธฐ๋ฅ์ Community.Toolkit.Mvvm์์ํ๋ ์ค ์๊ณ โฆ)
[RelayCommand]
private async Task OnSaveAsync(string value)
// examplePage.xaml
<Button Command="{Binding = SaveCommand}"
[RelayCommand]
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ธ๋ฉ ํ ๋ ์ ๋์ฌ On, ์ ๋ฏธ์ฌ Async๋ ์๋์ผ๋ก ๊ฑธ๋ฌ์ค๋๋ค.
(<Button Command="{Binding = OnSaveAsyncCommand}"
๋ก ๋ฐ์ธ๋ฉ ํด์ ์คํจํ ๊ฒฝํ์ด ์๋ค์)
![image]()
์ฐธ์กฐ ๋ฌธ์ - RelayCommand attribute
7๊ฐ์ ์ข์์
suwoo
6
๋ง๋ค, [ICommand]
๋ฅผ ๊น๋นกํ๊ตฐ์? ใ
ใ
ใ
ใ
๊ทธ๋ฅ ์ต์ ๋ฒ์ ์ผ๋ก ๋ฐ๊ฟ๋ฒ๋ฆฌ๋ฉด์, ๊ทธ๋ฅ ์๋ฌด๋๋ ๊ทธ๋ง์ธ ๋ฌธ์ ๊ฐ ๋์ด๋ฒ๋ ธ๋ค์ ใ
ใ
๊ทธ๋๋ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค!
1๊ฐ์ ์ข์์
suwoo
7
On ํค์๋๋ ๊ฑธ๋ฌ์ค ์ค์ ๋ชฐ๋๋ค์, ์์ ๊ทธ๋ฌ๋ฉด ๊ตณ์ด ๋ฉ์๋ ์ด๋ฆ ๋ฐ๊ฟ ํ์ ์์๋๋ฐ ใ
ใ
3๊ฐ์ ์ข์์
hiron88
8
VS2019์์ Community.Toolkit.Mvvm์ Attribute ์ฝ๋ ์๋์์ฑ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๋์? ใ
ใ
2๊ฐ์ ์ข์์
์ข์ํ ๊ฐ์ฌํฉ๋๋ค ^^
3๊ฐ์ ์ข์์
@hiron88 ์ ๋ ์๋
์ VS2019์์ ๊ธฐ๋ฅ์ด ์ง์๋์ง ์์ ๋ฒ์ ์ ์์ ์ ๋ฅผ ๋จน์์์ด์. ใ
ใ
@๊น๋ฏผ๊ท ๋ณ๋ง์์์.
๋์ ๋์
จ๋ค๋ ๋คํ์
๋๋ค.
2๊ฐ์ ์ข์์
๊ฐ์ฌํฉ๋๋ค. ์ ๋ง ์ข์ ํ์ด๋ค์.
์์ค์์ด ํ ์ค๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ๊ถ๊ธ์ฆ์ด ์์ต๋๋ค. ViewModel ํด๋์ค๊ฐ partial class๋ก ๋๋๋ฐ์,
๋๋จธ์ง partial class๋ ์ด๋์ ์๋์ง ๋ณด์ด์ง๋ฅผ ์๋ค์.
3๊ฐ์ ์ข์์
@Mukun_An Visual Studio๋ฅผ ํตํด ํ์ผ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ๋ํด์๋ ์์๊ฒ ์ง๋ง, ์์๋๋ก ๋จ๊ฒจ๋๊ฒ ์ต๋๋ค.
Test > F12 ๋๋ Go To Definition
์ด๋ ๊ฒ ํ๋ฉด ํ์
ํ์ผ์ ์ฐพ๊ธฐ ์ฝ์ฃ โฆ

ํ์
๋ทฐ๋ชจ ๋ธํ์ผ ํ
์์ ์ฐ์ธก ํด๋ฆญ > Open Containing Folder
ํด๋ ์์น: C:\Users\james\AppData\Local\Temp\VSGeneratedDocuments
๊ทธ๋ฆฌ๊ณ ,
App.g.cs
MainWindow.g.cs
๊ธฐ๋ณธ์ ์ธ App, MainWindow ๋ฑ์ ๊ฒฝ์ฐ์๋ ํ๋ก์ ํธ์ obj ํด๋์์ ์ง์ ์์ฑ๋์ง๋ง, Communitytoolkit์ ๊ฒฝ์ฐ์๋ AppData ์์น์ ์์ฑ์ด ๋๋๊ตฐ์. ํ๋ฒ ํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค!
3๊ฐ์ ์ข์์
CommandParameter๋ฅผ ์ฐ๋ ์์ ๋ ์๋ ค์ฃผ์ธ์
์๋
ํ์ธ์.
CommunityToolkit.Mvvm์์์
[RelayCommand] ๋
[ObservableObject] ์ฒ๋ผ
๋ณ์ ๊ท์น์ ๋ณ์๋ค์ด๋ฐ์ ๋งจ ์์ด ์๋ฌธ์์ด๊ฑฐ๋ โ_โ ์ฌ์ผ ํ๋ ๊ท์น์ด ์กด์ฌํ์ง ์์ต๋๋ค.
๋จ์ง, xaml์๋ง ๊ท์น์ด ์กด์ฌํ๋๋ฐ์.
ViewModel์์ ReleayCommand attribute๋ฅผ ๊ท์น์ ๋ค์ ๊ณผ ๊ฐ์ต๋๋ค.
{ํจ์๋ช
}Command
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ค์ ๊ฐ์ด ์ฌ์ฉ๋ฉ๋๋ค.
CommandParameter๊ฐ ์๋ ๊ฒฝ์ฐ
<Button Command="{Binding SaveCommand}"/>
[RelayCommand]
private void Save()
{
}
CommandParameter๊ฐ ์๋ ๊ฒฝ์ฐ
<Button Command="{Binding SaveCommand}" CommandParmeter={Binding .}/>
or
<TextBox x:Name="searchBox"/>
<Button Command="{Binding SaveCommand}"
CommandParmeter={Binding Text, ElementName=searchBox}}/>
[RelayCommand]
private void Save(string value)
{
}
p.s ์์ฑ๋๋ ์กฐ๊ฑด์ด ๋ง์์ผ ์์ค์ ๋ค๋ ์ดํฐ๋ฅผ ํตํด ์๋ ์์ฑ ๋๊ธฐ ๋๋ฌธ์ ๊ท์น ์ด๋ผ๊ณ ํํํ์์ต๋๋ค.
4๊ฐ์ ์ข์์