小编Exi*_*ist的帖子

WPF触发器基于对象类型

有没有办法对触发器的对象类型进行比较?

<DataTrigger Binding="{Binding SelectedItem}" Value="SelectedItem's Type">
</DataTrigger>
Run Code Online (Sandbox Code Playgroud)

背景:我有一个工具栏,我想要隐藏按钮,具体取决于当前为所选项目对象设置的子类.

谢谢

wpf xaml binding types datatrigger

36
推荐指数
5
解决办法
2万
查看次数

关于重构为抽象类的基本问题

这可能是一个初学者的问题,但是有一种标准方法可以将Wheel属性的重复重构为抽象类,但仍然保持对Part类型的显式强制转换.我们假设我们必须阻止将FastCarWheel放在SlowCar上,并且有许多属性就像这样.

abstract class Car {}

class FastCar : Car
{
    public FastCarWheel Wheel { get; set; }
} 

class SlowCar : Car
{
    public SlowCarWheel Wheel { get; set; }
} 

abstract class WheelPart {}

class FastCarWheel: WheelPart {}

class SlowCarWheel: WheelPart {}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,只允许这种类型的复制是常见的吗?我正在考虑使用泛型,但似乎我正在解决这个问题,并且每个额外的属性都会变得更糟.

abstract class Car <P>
    where P : Part
{
    protected abstract P Wheel { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

谢谢

c# inheritance abstract-class

6
推荐指数
1
解决办法
350
查看次数

WPF 4.0在DataGrid上数据绑定ContextMenu

我有一段时间试图在DataGrid上动态绑定ContextMenu.DataGrid绑定到一个很好的对象列表:

<DataGrid ItemsSource="{Binding DataGridItems}">
Run Code Online (Sandbox Code Playgroud)

对于每个DataGridItem对象,我有一个在属性上公开的MenuItem列表,我想用它来绑定到ContextMenu.我尝试了以下但我认为我遗漏了一些东西:

<DataGrid ItemsSource="{Binding DataGridItems}">
     <DataGrid.ContextMenu>
          <ContextMenu ItemsSource="{Binding ContextMenuItems}" >
               <MenuItem Header="{Binding Name}" Command="{Binding OnClick}"></MenuItem>
          </ContextMenu>
     </DataGrid.ContextMenu>
 <DataGrid>
Run Code Online (Sandbox Code Playgroud)
public class DataGridItem
{
    public ObservableCollection<ContextMenuItem> ContextMenuItems
    {
        get { return _contextMenuItems; }
    }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助或指导将不胜感激.

data-binding wpf datagrid contextmenu

5
推荐指数
1
解决办法
4938
查看次数