WPF DataTrigger不与视图模型物业工作

WPF DataTrigger不与视图模型物业工作

问题描述:

我有一个XAML用户控件如下:WPF DataTrigger不与视图模型物业工作

<UserControl x:Class="Presentation.Views.PersonListView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:cal="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro.Platform" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300" 
     MinWidth="300" MinHeight="300"> 
<Grid> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="10"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <TextBlock Grid.Row="0" Text="List of Persons"/> 
     <DataGrid SelectionMode="Single" SelectionUnit="FullRow" Grid.Row="2" x:Name="Persons" IsReadOnly="True" 
        cal:Message.Attach="[Event MouseDoubleClick] = [Action OpenPersonDetail()]" SelectedItem="{Binding SelectedPerson}"> 
      <DataGrid.RowStyle> 
       <Style TargetType="DataGridRow"> 
        <Setter Property="Background" Value="White"/> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding DataRowChanged}" Value="True"> 
          <Setter Property="Background" Value="Red"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </DataGrid.RowStyle> 
     </DataGrid> 
    </Grid> 
</Grid> 

而且ViewModel类:

public class PersonListViewModel 
{ 
    ... 

    private bool m_DataRowChanged; 

    public IObservableCollection<Person> Persons { 
     get; 
     set; 
    } 

    public bool DataRowChanged 
    { 
     get { return m_DataRowChanged; } 
     set 
     { 
      m_DataRowChanged = value; 
      NotifyOfPropertyChange(() => DataRowChanged); 
     } 
    } 

    public void Handle(Person p) 
    { 
     GetPersonList(); 
     foreach (var item in Persons) 
     { 
      if (!item.Version.Equals(p.Version)) 
      { 
       DataRowChanged = true; 
       break; 
      } 
     } 
    } 
} 

Person是其中包含了一些类属性:名字,姓氏,年龄...

但它不起作用ause DataRowChanged不是Person的成员。如果我通过XAML中的Person的财产之一更改DataRowChanged,它将起作用。 任何人都可以帮助我。提前致谢。

试试这个:

<DataTrigger Binding="{Binding DataContext.DataRowChanged, 
         RelativeSource={RelativeSource AncestorType=UserControl}}" 
      Value="True"> 
    <Setter Property="Background" Value="Red"/> 
</DataTrigger> 
+0

哦,你救了我的一天。 –

+2

@QuanNguyen我希望你也从中学到了一些东西,不仅仅是复制到你的项目中,而且很高兴它能够工作。了解这种工作原理将有助于加深对整个绑定引擎的理解,并使您将来的绑定体验更好。 – Jai