xaml

<Window x:Class="G24W12WPFCardDealer.MainWindow"
        xmlns="<http://schemas.microsoft.com/winfx/2006/xaml/presentation>"
        xmlns:x="<http://schemas.microsoft.com/winfx/2006/xaml>"
        xmlns:d="<http://schemas.microsoft.com/expression/blend/2008>"
        xmlns:mc="<http://schemas.openxmlformats.org/markup-compatibility/2006>"
        xmlns:local="clr-namespace:G24W12WPFCardDealer"
        mc:Ignorable="d"
        Title="카드 딜러" Height="450" Width="800">
    <DockPanel>
        <Button 
            DockPanel.Dock="Bottom" 
            x:Name="BtnDeal"
            Content="카드 분배"
            Padding="8"
            Margin="16"/>
        <Image 
            x:Name="Card1" 
            Height="400"
            Source="<https://picsum.photos/400/400>"/>
    </DockPanel>
</Window>

이미지 출력

<Image 
            x:Name="Card1" 
            Height="320"
            Source="Images/10_of_clubs.png"/>

버튼에 클릭 추가

Click=”OnDeal”

 private void OnDeal(object sender, RoutedEventArgs e) {
            BitmapImage image = new BitmapImage(
                new Uri("Images/2_of_clubs.png", UriKind.Relative)
            );
            Card1.Source = image;
        }

랜덤으로 하기

private void OnDeal(object sender, RoutedEventArgs e) {
            string[] suits = ["spades", "diamonds", "hearts", "clubs",];
            string[] values = ["ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "jack", "queen", "king", ];

            Random random = new Random();
            int card = random.Next(suits.Length * values.Length);

            string suit = suits[card / values.Length];
            string value = values[card % values.Length];
						
						if (value == "jack" || value == "queen" || value == "king")
              suit += "2";
						
            BitmapImage image = new BitmapImage(
                new Uri($"Images/{value}_of_{suit}.png", UriKind.Relative)
            );
            Card1.Source = image;
        }

카드 5개 출력

<UniformGrid 
            Rows="1"
            Background="#040">
            <Image x:Name="Card1"
               Stretch="None"
               Source="Images/black_joker.png"/>
            <Image x:Name="Card2"
               Stretch="None"
               Source="Images/black_joker.png"/>
            <Image x:Name="Card3"
               Stretch="None"
               Source="Images/black_joker.png"/>
            <Image x:Name="Card4"
               Stretch="None"
               Source="Images/black_joker.png"/>
            <Image x:Name="Card5"
               Stretch="None"
               Source="Images/black_joker.png"/>
        </UniformGrid>

중복 되지 않게 하기

using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Imaging;

namespace G24W12WPFCardDealer {
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window {
        public MainWindow() {
            InitializeComponent();
        }

        private void OnDeal(object sender, RoutedEventArgs e) {
            string[] suits = ["spades", "diamonds", "hearts", "clubs",];
            string[] values = ["ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "jack", "queen", "king", ];

            Random random = new Random();

            // C#에서 Set 없고 대신 HashSet 사용
            // Set은 중복 안되는 성질 이용
            HashSet<int> cardSet = new HashSet<int>();
            while (cardSet.Count < 5) {
                cardSet.Add(random.Next(suits.Length * values.Length));
            }

            // List로 바꾸고 정렬 (Set은 순서 없음)
            List<int> cardList = cardSet.ToList();
            cardList.Sort();

            for (int i = 0; i < cardList.Count; i++) {
                string suit = suits[cardList[i] / values.Length];
                string value = values[cardList[i] % values.Length];

                Image imageCard = (Image)FindName($"Card{i + 1}");
                imageCard.Source = new BitmapImage(
                    new Uri(
                        (value == "jack" || value == "queen" || value == "king")
                        ? $"Images/{value}_of_{suit}2.png"
                        : $"Images/{value}_of_{suit}.png", 
                        UriKind.Relative
                    )
                );
            }
        }
    }
}

MVVM

Model

namespace G24W12WPFCardDealer;

class Card {
    public static readonly int NUMBER_OF_SUITS = 4;
    public static readonly int NUMBER_OF_VALUES = 13;

    public Card(int suit, int value) {
        Suit = suit;
        Value = value;
    }
 
    public Card(int number) {
        Suit = number / NUMBER_OF_VALUES;
        Value = number % NUMBER_OF_VALUES;
    }

    public int Suit { get; set; }
    public int Value { get; set; }
}

class CardModel 
{
    public static readonly int NUMBER_OF_CARDS = 5;

    private List<Card> _cards = new List<Card>();

    public List<Card> Cards { get { return _cards; } }

    public CardModel() 
    {
        // -1, -1이면 Jocker 출력
        for (int i = 0; i < NUMBER_OF_CARDS; i++)
            _cards.Add(new Card(-1, -1));
    }

    public List<Card> DealCards() 
    {
        Random random = new Random();

        // C#에서 Set 없고 대신 HashSet 사용
        // Set은 중복 안되는 성질 이용
        HashSet<int> cardSet = new HashSet<int>();
        while (cardSet.Count < NUMBER_OF_CARDS)
        {           
          cardSet.Add(random.Next(Card.NUMBER_OF_SUITS * Card.NUMBER_OF_VALUES));
        }

        // List로 바꾸고 정렬 (Set은 순서 없음)
        List<int> cardList = cardSet.ToList();
        cardList.Sort();

        _cards.Clear();
        foreach (var cardNumber in cardList) {
            _cards.Add(new Card(cardNumber));
        }

        return Cards;
    }
}

ModelView