将ListBox的DataTemplateItem内部的属性绑定到MainPage中的外部对象

时间:2019-06-03 17:44:32

标签: c# wpf xaml uwp

我在ListBox中得到了DataTemplateDataTemplate,在另一个ListBox中,我试图将其Visibility绑定到{ {1}}

XAML:

MainPage

C#:

<ListBox x:Name="RegistersListView" ItemsSource="{x:Bind registersList}">
    <ListBox.ItemTemplate>
        <DataTemplate x:DataType="structures:Register">
            <StackPanel>
                <ListBox x:Name="FieldsListView" ItemsSource="{x:Bind fields_list}" Visibility="{x:Bind SomeVisibilityObjectIMain}">
                    <ListBox.ItemTemplate>
                        <DataTemplate x:DataType="structures:Field">
                            <Button Content="{x:Bind name}"/>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

我需要以某种方式绑定到“ SomeVisibilityObjectIMain”,我试图与ElementName绑定,甚至使对象静态,但无法成功。 我的可绑定对象比此处的示例复杂,但是解决此问题将为我提供解决方案。

1 个答案:

答案 0 :(得分:1)

您可以使用{Binding}代替x:Bind。这样,您可以在页面上添加x:Name="Page",然后在内部绑定中使用此名称:

{Binding ElementName=Page, Path=MyProperty}

要使{Binding}工作,MyProperty实际上必须是一个属性。从您的示例代码(使用var也是无效的)来看,它似乎只是一个纯字段,因此您将需要以下内容:

public string MyProperty {get;set;}

要同时获得PropertyChanged通知,您将需要添加一个后备字段并触发PropertyChanged事件。

但是,总的来说,更好的解决方案是将DataTemplate所需的所有信息都包含在与其绑定的实际项目中。这意味着-您将为商品创建自定义视图模型类型,其中将包含控制可见性所需的信息。