Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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多重绑定到Model.ChildProperty不';不行?_C#_Wpf - Fatal编程技术网

C# WPF多重绑定到Model.ChildProperty不';不行?

C# WPF多重绑定到Model.ChildProperty不';不行?,c#,wpf,C#,Wpf,我在表格上有一些标签。有些工作,有些不工作。不同之处在于,不起作用的绑定被设置为多绑定,但在这个特定实例中,它们似乎无法正确绑定 下面是两个标签的示例,一个正常,一个不正常。它们都与父对象共享同一个网格,并且我绑定到的对象被设置为页面的DataContext,因此它们也应该共享上下文 上下文对象基本上采用以下形式(为了隐私/安全而抽象) 作品: <Label Content="{Binding Parent.PropA}"/> 不起作用: <Label> &

我在表格上有一些标签。有些工作,有些不工作。不同之处在于,不起作用的绑定被设置为多绑定,但在这个特定实例中,它们似乎无法正确绑定

下面是两个标签的示例,一个正常,一个不正常。它们都与父对象共享同一个网格,并且我绑定到的对象被设置为页面的DataContext,因此它们也应该共享上下文

上下文对象基本上采用以下形式(为了隐私/安全而抽象)

作品:

<Label Content="{Binding Parent.PropA}"/>

不起作用:

<Label>
    <Label.Content>
        <MultiBinding StringFormat="{}{0} {1}">
            <Binding Path="Parent.PropB"/>
            <Binding Path="Parent.PropC"/>
        </MultiBinding>
    </Label.Content>
</Label>

我知道这种语法是有效的,因为我有一些其他的多重绑定,它们采用相同的形式和工作方式,不同的是它们的页面直接绑定到“Parent”,它们的绑定看起来更像

<Binding Path="PropB"/>

问题似乎是在使用标记并尝试引用绑定上下文的子属性的子属性时。为什么会发生这种情况?我该如何应对

我还尝试将标签本身的DataContext绑定到父对象,这也不起作用


为什么会发生这种情况?我如何才能避免这种情况,而不在容器上创建一堆不同的数据上下文并以这种方式进行处理?

绑定的
StringFormat
属性仅在绑定的源属性类型为
string
时才应用

标签的
Content
属性的类型为
object
,因此未应用
StringFormat
,并且绑定系统抱怨缺少多绑定转换器

使用TextBlock而不是标签时,目标属性将是
Text
,类型为string。因此,StringFormat将通过以下方式应用:

<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0} {1}">
            <Binding Path="Parent.PropB"/>
            <Binding Path="Parent.PropC"/>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

绑定的
StringFormat
属性仅在绑定的源属性类型为
string
时应用

标签的
Content
属性的类型为
object
,因此未应用
StringFormat
,并且绑定系统抱怨缺少多绑定转换器

使用TextBlock而不是标签时,目标属性将是
Text
,类型为string。因此,StringFormat将通过以下方式应用:

<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0} {1}">
            <Binding Path="Parent.PropB"/>
            <Binding Path="Parent.PropC"/>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

看看VisualStudio中的输出窗口。您收到一条绑定错误消息。您是对的,我是对的,它要求我提供一个多值转换器。为什么我需要为此绑定指定转换器,但如果同一属性被指定为顶级属性,我就不需要指定转换器?问题是,为什么要使用标签而不是文本块?如果没有转换器,绑定TextBlock的Text属性就可以这样工作。因为我不知道这一点,而且我也看不出为什么当标签在其他地方工作时,将字符串数据绑定到标签上与将其绑定到TextBlock有什么不同?这解决了我眼前的问题,谢谢。区别:
Label
是一个
ContentControl
。它的主要属性是
Content
,它接受一个对象,通常通过
ContentPresenter
显示,除非您覆盖它。
TextBlock
具有
Text
属性,该属性只接受一个
字符串
,在您的情况下不需要转换。请查看Visual Studio中的输出窗口。您收到一条绑定错误消息。您是对的,我是对的,它要求我提供一个多值转换器。为什么我需要为此绑定指定转换器,但如果同一属性被指定为顶级属性,我就不需要指定转换器?问题是,为什么要使用标签而不是文本块?如果没有转换器,绑定TextBlock的Text属性就可以这样工作。因为我不知道这一点,而且我也看不出为什么当标签在其他地方工作时,将字符串数据绑定到标签上与将其绑定到TextBlock有什么不同?这解决了我眼前的问题,谢谢。区别:
Label
是一个
ContentControl
。它的主要属性是
Content
,它接受一个对象,通常通过
ContentPresenter
显示,除非您覆盖它。
TextBlock
具有
Text
属性,该属性只接受一个
字符串
,在您的情况下不需要进行转换。啊,这对我来说现在更有意义了。谢谢你的解释!啊,这对我来说更有意义了。谢谢你的解释!
<TextBlock Text="{Binding Parent.PropA, StringFormat=Content: {0}}"/>
<Label Content="{Binding Parent.PropA, StringFormat=Content: {0}}"/>
<Label Content="{Binding Parent.PropA}" ContentStringFormat="Content: {0}"/>