C# 重写ToString()方法时,绑定行为异常

C# 重写ToString()方法时,绑定行为异常,c#,wpf,xaml,data-binding,datatrigger,C#,Wpf,Xaml,Data Binding,Datatrigger,请参见下面的XAML: <Window x:Class="TabControl.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:TabControl" Title="Main

请参见下面的
XAML

<Window x:Class="TabControl.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        
    xmlns:local="clr-namespace:TabControl"
    Title="MainWindow"   Height="300" Width="300"        
    xmlns:Interact="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"       
    DataContext="{Binding RelativeSource={RelativeSource Mode=Self}}"       
    >   
<Window.Resources>
    <Style TargetType="{x:Type DataGridRow}" x:Key="myStyle">
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsTrend.Value}" Value="True" >
                <Setter Property="Background" Value="Gold"/>
            </DataTrigger>
        </Style.Triggers>            
    </Style>
</Window.Resources>
<ScrollViewer>
    <DataGrid ItemsSource="{Binding list}" x:Name="myGrid" RowStyle="{StaticResource myStyle}"  >
        <DataGrid.Columns>
            <DataGridTextColumn Header="Name" Binding="{Binding Path=Name.Value,Mode=TwoWay}" />               
        </DataGrid.Columns>                       
    </DataGrid>
</ScrollViewer>
课程

要从每个绑定中删除
.Value
,我将
重写
ToString()
方法

public override string ToString()
{
    return Value.ToString();
}
和绑定更改为:

<DataGridTextColumn Header="Name" Binding="{Binding Path=Name,Mode=TwoWay}" />    

但是对于
DataTrigger
Column
绑定,它的行为不同。有人能解释一下原因和方式吗?更改后,
DataTrigger
为什么不工作?

DataTrigger
获取一个
CellContent
实例,并使用参数
调用
Equals()
“True”
。但CellContent对象不等于
“True”

如果我覆盖
等于
,DataTrigger就会工作

public override bool Equals(object obj)
{
    return Value.ToString() == (string) obj;
}

你能解释一下“从我覆盖的每个绑定
ToString()
方法中删除
.Value
吗?”?双向绑定显然无法将
string
值转换回来。我唯一能想到的是ToString是否因为值为null而引发异常,或者value的ToString实现是否引发异常。您的输出窗口中应该有信息。不要使用
ToString
来做这样的事情,正如前面提到的,您还破坏了双向绑定。@Sinatr您可能是对的,但我更关心的是为什么绑定和数据触发器的行为不同。。。?在发布问题时…@nkonishvt不,不是。。。。。当在绑定中定义对象时,如果它是基元类型,它将被解析为基元类型,否则它将在应用ToString()方法后解析。。。这就是为什么我否决了这个方法,并对没有得到预期结果感到好奇
<DataGridTextColumn Header="Name" Binding="{Binding Path=Name,Mode=TwoWay}" />    
<DataGridTextColumn Header="Name" Binding="{Binding Path=Name,Mode=TwoWay}" />  
<DataTrigger Binding="{Binding IsTrend}" Value="True" >
public override bool Equals(object obj)
{
    return Value.ToString() == (string) obj;
}