我在ListBox
中得到了DataTemplate
和DataTemplate
,在另一个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绑定,甚至使对象静态,但无法成功。 我的可绑定对象比此处的示例复杂,但是解决此问题将为我提供解决方案。
答案 0 :(得分:1)
您可以使用{Binding}
代替x:Bind
。这样,您可以在页面上添加x:Name="Page"
,然后在内部绑定中使用此名称:
{Binding ElementName=Page, Path=MyProperty}
要使{Binding}
工作,MyProperty
实际上必须是一个属性。从您的示例代码(使用var
也是无效的)来看,它似乎只是一个纯字段,因此您将需要以下内容:
public string MyProperty {get;set;}
要同时获得PropertyChanged
通知,您将需要添加一个后备字段并触发PropertyChanged
事件。
但是,总的来说,更好的解决方案是将DataTemplate
所需的所有信息都包含在与其绑定的实际项目中。这意味着-您将为商品创建自定义视图模型类型,其中将包含控制可见性所需的信息。