WPF数据触发器

WPF数据触发器,wpf,datatemplate,datatrigger,Wpf,Datatemplate,Datatrigger,我正在做一个棋盘游戏来掌握WPF,为了让这个部分正常工作,我花了一整晚的时间 下面的代码属于“House”用户控件,在设计器上运行良好。我可以选择“house”对象,在属性网格上更改HouseType属性,并查看所需效果。但是在运行时,如果我更改了相同的属性,什么也不会发生 <DrawingBrush x:Key="emptyHouseBrush"> <DrawingBrush.Drawing> <GeometryDrawing Geometry="M0

我正在做一个棋盘游戏来掌握WPF,为了让这个部分正常工作,我花了一整晚的时间

下面的代码属于“House”用户控件,在设计器上运行良好。我可以选择“house”对象,在属性网格上更改HouseType属性,并查看所需效果。但是在运行时,如果我更改了相同的属性,什么也不会发生

<DrawingBrush x:Key="emptyHouseBrush">
  <DrawingBrush.Drawing>
    <GeometryDrawing Geometry="M0,0 100,100 M0,100 100,0">
      <GeometryDrawing.Pen>
        <Pen Brush="Black" />
      </GeometryDrawing.Pen>
    </GeometryDrawing>
  </DrawingBrush.Drawing>
</DrawingBrush>

<DataTemplate DataType="{x:Type m:House}">
  <Border x:Name="border" BorderThickness="2"  >
    <Grid x:Name="grid" >

    </Grid>
  </Border>      
  <DataTemplate.Triggers>
    <DataTrigger Binding="{Binding Path=HouseType}" Value="Neutral">
      <Setter TargetName="border" Property="BorderBrush" Value="Black"/>
    </DataTrigger>
    <DataTrigger Binding="{Binding Path=HouseType}" Value="Forbidden">
      <Setter TargetName="border" Property="BorderBrush" Value="Black"/>
      <Setter TargetName="grid" Property="Background" Value="{StaticResource ResourceKey=emptyHouseBrush}"/>
    </DataTrigger>
    <DataTrigger Binding="{Binding Path=HouseType}" Value="Borders">
      <Setter TargetName="border" Property="BorderBrush" Value="#FF7A6D34"/>
    </DataTrigger>
    <DataTrigger Binding="{Binding Path=HouseType}" Value="Homeland">
      <Setter TargetName="border" Property="BorderBrush" Value="#FFFFD200"/>
      <Setter TargetName="border" Property="Background" Value="#54FBE681"/>
    </DataTrigger>

    <Trigger SourceName="border" Property="IsMouseOver" Value="True">
      <Setter TargetName="border" Property="Background" Value="#645CAEF9"/>
    </Trigger>

  </DataTemplate.Triggers>
</DataTemplate>


</Control.Resources>
  <ContentControl>
    <m:House x:Name="house" HouseType="Neutral"></m:House>
  </ContentControl>

</UserControl>

我尝试过使用默认属性、依赖属性、实现IPropertyChanged接口、尝试将属性移动到控件并重复上述所有操作。。。还是什么都没有

我错过了什么?更改此属性后,如何让控件更新边框(和背景)

提前谢谢


马塞洛

我觉得不错。确保House对象正在实现INotifyPropertyChanged,并且在更新属性时您正在调用PropertyChanged。如果仍然无法工作,请查看输出调试窗口。绑定错误通常会出现在那里

代码对我来说似乎很好。 寻找这些错误的一个好方法是一个我发现非常棒的小程序:Snoop

只要看一看,也许你就能追溯到你的错误


{previous}

看起来你把控制模板和数据模板混在一起了。 DataTemplate用于指定特定数据对象类型的显示方式,它通常包含一些绑定到对象的值属性的控件。您想要更改控件的默认可视化,最好使用ControlTemplate。如果要保持控件的可视化,只需添加边框颜色更改,则可以使用诸如Blend之类的工具获取房屋控件的当前控件模板,并通过添加触发器对其进行自定义