Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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# 绑定WPF返回默认字符串_C#_.net_Wpf_Xaml - Fatal编程技术网

C# 绑定WPF返回默认字符串

C# 绑定WPF返回默认字符串,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,我想在我的xaml列中绑定对象Info: <DataGridTextColumn Width="200" Binding="{Binding Path=Message.Info.InfoName, Mode=OneWay, TargetNullValue=No Information available}"> <DataGridTextColumn.Header> <Label>Information</Label>

我想在我的xaml列中绑定对象
Info

<DataGridTextColumn Width="200" Binding="{Binding Path=Message.Info.InfoName, Mode=OneWay, TargetNullValue=No Information available}">
    <DataGridTextColumn.Header>
        <Label>Information</Label>
    </DataGridTextColumn.Header>
</DataGridTextColumn>
现在,对于每条消息,WPF列应该显示信息的名称(从对象信息(Info.InfoName属性)获取),或者如果消息没有信息(其他类型),它应该显示“无可用信息”

如果没有可用的信息,我就不会得到任何对象(Info==null)


我的问题:

  • 如果消息中包含信息,则属性信息将获取一个具有名称的对象,并且绑定可以工作
  • 如果消息没有信息,则属性信息不会获取对象,列为空

我所尝试的:

我试图在Info属性(getter)中插入if语句。该语句可以工作,但如果属性需要返回类型对象信息,则当然不能返回字符串


我的另一种方法
TargetNullValue=No Information available}
也不起作用。

在一定程度上取决于如何获取数据,但一种解决方案可能是在获取数据时填充的消息上有一个“InfoName”属性

List<Message> messages = context.Messages.Select(m => new Message
{
    InfoName = m.Info != null ? m.InfoName : "no info available",
    // etc.
})
.ToList();
List messages=context.messages.Select(m=>newmessage
{
InfoName=m.Info!=null?m.InfoName:“无可用信息”,
//等等。
})
.ToList();

您应该向XAML添加FallbackValue属性,如下所示:

Binding="{Binding
    Path=Message.Info.InfoName,
    Mode=OneWay,
    FallbackValue=No Information available}"

这是因为绑定路径中的信息部分为空,导致绑定失败。您应该在调试输出中看到匹配错误

很好,但是
TargetNullValue
会解决这种情况下的问题吗,因为源已定义?否,因为源未定义:)。源由整个路径定义,而不是它的一部分。在这种情况下,路径没有完全填充。
Binding="{Binding
    Path=Message.Info.InfoName,
    Mode=OneWay,
    FallbackValue=No Information available}"