DataTemplate의 값을 팝업으로 전달하려면...

안녕하세요.

달력에서 날짜 부분을 클릭하면
팝업에 해당 날짜를 전달해서 메모를 하는 로직을 만들어 보려고 합니다.
아래와 같이 만들었는데 날짜 영역에서 팝업에 해당 날짜를 어떻게 전달해야 하는지 모르겠네요.

코드 비하인드에서

dayList.ItemsSource = dayItems;

dayItems 안에 string day 가 하루하루 있고 그걸로 달력을 그리고 있습니다.

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="7*"/>
        <ColumnDefinition Width="7*"/>
        <ColumnDefinition Width="7*"/>
        <ColumnDefinition Width="7*"/>
        <ColumnDefinition Width="7*"/>
        <ColumnDefinition Width="7*"/>
        <ColumnDefinition Width="7*"/>
    </Grid.ColumnDefinitions>

    <TextBlock Text="Sun" Grid.Column="0" Foreground="Red"/>
    <TextBlock Text="Mon" Grid.Column="1" />
    <TextBlock Text="Tue" Grid.Column="2" />
    <TextBlock Text="Wed" Grid.Column="3" />
    <TextBlock Text="Thu" Grid.Column="4" />
    <TextBlock Text="Fri" Grid.Column="5" />
    <TextBlock Text="Sat" Grid.Column="6" Foreground="Blue"/>

</Grid>

<Border BorderBrush="Black" BorderThickness="1" x:Name="borderDay" >
    <ItemsControl x:Name="dayList">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid Columns="7"/>
            </ItemsPanelTemplate>

        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel >
                    <StackPanel Orientation="Horizontal"  MouseDown="day_MouseDown">
                        <TextBlock Text="{Binding day}" x:Name="blockDay" Foreground="{Binding color}"/>
                    </StackPanel>
                </StackPanel>
                
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Border>

Resources? DataContext? 이런 걸로 해보려 해도 안되네요.
나중에 메모도 날짜랑 같이 나오게 할 건데
저런 식으로 달력 그리는게 맞는지도 모르겠네요 ㅠㅠ

2개의 좋아요

day_MouseDown 이벤트 핸들러에서 팝업을 표시하신다면

private void day_MouseDown(object sender, MouseButtonEventArgs e)
{
    var someType = (sender as FrameworkElement).DataContext as SomeType;
    var day = someType.day;
    ...
}

이렇게 접근 가능합니다.

MVVM을 사용하신다면 ButtonCommand를 정의해서 CommandParameter 속성에 날짜를 넘기는 방법도 고려해 볼 수 있을 것 같습니다.

<DataTemplate>
    <Button Command="{Binding DataContext.ShowPopupCommand, ElementName=dayList}"
            CommandParameter="{Binding day}"
            Content="{Binding day}"/>
</DataTemplate>
3개의 좋아요

답변 주신 내용으로 해보려 했는데

as SomeType 부분은 없는 형식이라고 나오네요. ㅠㅠ

1개의 좋아요

SomeType은 실제 Type이름이 아니라 dayListItemsSource로 지정하신 dayItems 변수 혹은 속성의 형식을 말하는 겁니다.
SomeTypeday 속성을 포함하고 있을 것이고요.
dayItems의 형식이 ObservableCollection<SomeType> 이나 SomeType[] 혹은 List<SomeType> 형식이라고 가정하고 답변을 드렸습니다.

3개의 좋아요