【问题标题】:Capture Label text from DataGrid in MVVM WPF从 MVVM WPF 中的 DataGrid 捕获标签文本
【发布时间】:2014-02-26 04:54:55
【问题描述】:

我已经使用 MVVM 在 DataGrid 中实现了Label。我的要求是当用户单击Label 时需要引发事件,这工作正常。但现在我想捕获标签文本,但我无法做到这一点:

<DataGrid HorizontalAlignment="Stretch" Name="DgPreviousEntries" HeadersVisibility="None"
             ItemsSource="{Binding WeeklyWiseEntries}" AutoGenerateColumns="False" SelectedItem="{Binding SelectedweekEntry}">            
            <DataGrid.Columns>
                <DataGridTemplateColumn IsReadOnly="True" Width="600">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <Grid>
                                    <Label Grid.Column="0" Grid.Row="1">
                                        <i:Interaction.Triggers>
                                            <i:EventTrigger EventName="MouseLeftButtonUp">
                                                <i:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=DataContext.WeekCommand}">
                                                </i:InvokeCommandAction>
                                            </i:EventTrigger>                                            
                                        </i:Interaction.Triggers>
                                        <Label.Content>
                                            <TextBlock>
                                            <TextBlock.Text>
                                                <MultiBinding StringFormat="Mon &#x0a; {0}">
                                                    <Binding Path="Monday" Source="Monday" />                                        
                                                 </MultiBinding>
                                            </TextBlock.Text>
                                            </TextBlock>                                            
                                        </Label.Content> 
                                    </Label>
                                </Grid>
                            </StackPanel>
                        <DataTemplate>                  
                    <DataGridTemplateColumn.CellTemplate>   
                <DataGrid.Columns>
        </DataGrid>

【问题讨论】:

    标签: c# wpf mvvm datagrid wpfdatagrid


    【解决方案1】:

    您是否尝试将标签文本作为命令参数传递?

    CommandParameter={Binding Path=Content, ElementName=LabelName}

    例如:

    <Label Grid.Column="0" Grid.Row="1" Name="DayLabel">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="MouseLeftButtonUp">
            <i:InvokeCommandAction 
            Command="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=DataContext.WeekCommand}"
            CommandParameter={Binding Path=Content, ElementName=DayLabel}>
            </i:InvokeCommandAction>
        </i:EventTrigger>                                            
    </i:Interaction.Triggers>
    <Label.Content>
        <TextBlock>
        <TextBlock.Text>
            <MultiBinding StringFormat="Mon &#x0a; {0}">
                <Binding Path="Monday" Source="Monday" />                                        
             </MultiBinding>
        </TextBlock.Text>
        </TextBlock>                                            
    </Label.Content> 
    </Label>
    

    【讨论】:

    • 嗨,但是如何在我的 ViewModel 中捕获 DayLabel(标签)文本?因为我已经实现了label的内容。
    • 您好,当我将 RelayCommand 实现为 WeekCommand = new RelayCommand(WeekData, null); 时,我在 ViewModel 中收到 Null 值
    • 谢谢你的回答,答案中唯一的变化是{Binding Path=Text, ElementName=DayLabel}应该是{Binding Path=Content, ElementName=DayLabel}
    • 我以 DayLabel 为例,理想情况下,您可以将命令参数绑定到视图模型中的任何属性。适合你的请做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    相关资源
    最近更新 更多