Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问项目源项目_C#_.net_Wpf_Xaml - Fatal编程技术网

C# 访问项目源项目

C# 访问项目源项目,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,我正在创建一个类似于VisualStudio中的错误列表控件。每个错误由一个具有三个值的类表示:类型(enum:error/Warning/Message)、文本(string)和时间(DateTime)。该类还有两个只读getter:TimeString(返回时间为HH:MM)和Icon(返回基于类型的图标路径) 我通过ItemsSource属性将ItemsControl绑定到对象的ObservableCollection 现在,我想为每个项目实现一个上下文菜单,它有两个操作:复制到剪贴板和从

我正在创建一个类似于VisualStudio中的错误列表控件。每个错误由一个具有三个值的类表示:类型(enum:error/Warning/Message)、文本(string)和时间(DateTime)。该类还有两个只读getter:TimeString(返回时间为HH:MM)和Icon(返回基于类型的图标路径)

我通过ItemsSource属性将ItemsControl绑定到对象的ObservableCollection

现在,我想为每个项目实现一个上下文菜单,它有两个操作:复制到剪贴板和从列表中删除

如何从关联菜单项click handler访问集合中的原始项?

以下是我的XAML代码:

    <ItemsControl Name="itemsControl"  ItemsSource="{Binding Items, ElementName=ConsoleWindow}">
        <ItemsControl.ItemTemplate>
            <DataTemplate DataType="Console.Items">
                <Border Name="itemBorder" BorderBrush="LightGray" BorderThickness="0,0,0,1" SnapsToDevicePixels="True" Padding="4">
                    <Border.ContextMenu>
                        <ContextMenu>
                            <MenuItem Header="Copy to clipboard" />
                            <MenuItem Header="Delete" />
                        </ContextMenu>
                    </Border.ContextMenu>
                    <DockPanel>
                        <Image Width="16" Height="16" Source="{Binding Icon}" Margin="0,3,4,0" VerticalAlignment="Top" DockPanel.Dock="Left" />
                        <TextBlock VerticalAlignment="Center" TextWrapping="Wrap" DockPanel.Dock="Left">
                            <Run Text="{Binding Text}" />
                            <TextBlock Foreground="Gray" FontSize="9">
                                <Run Text=" ("  /><Run Text="{Binding TimeString, Mode=OneWay}" /><Run Text=") " />
                            </TextBlock>
                        </TextBlock>
                    </DockPanel>

谢谢你的帮助

数据模板中任何FrameworkElement派生元素(即TextBlock、Image或MenuItem)的
DataContext
属性应具有原始数据项(除非另有设置,否则子级自动继承其父级的数据源)


作为click事件处理程序的一部分,您将获得作为事件源的元素,因此将其强制转换为MenuItem并检查其DataContext属性。

@slugster的答案将起作用。一种更像WPF的方法是对每个菜单项使用命令,并将参数设置为
{Binding}
。WPF附带了用于复制和删除的命令,因此您可以重用这些命令。

顺便说一句,我不会将图标路径放在绑定对象上。改为在枚举值属性上使用DataTrigger或自定义IValueConverter!