【问题标题】:Bind a property, inside DataTemplateItem in ListBox, to an outside object in MainPage将 ListBox 中 DataTemplateItem 内的属性绑定到 MainPage 中的外部对象
【发布时间】:2019-10-19 07:03:12
【问题描述】:

我得到了ListBoxDataTemplate,在DataTemplate 里面我得到了另一个ListBox,试图将它的Visibility 绑定到在MainPage 中找到的另一个对象

XAML:

<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>

C#:

public sealed partial class HWTab : Page
{
    public ObservableCollection<Register> registersList = new ObservableCollection<Register>();

    public var SomeVisibilityObjectIMain;

    public HWTab()
    {
        InitializeComponent();
        InitData();
        this.DataContext = hwType;
    }

     ....
 }

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

【问题讨论】:

    标签: c# wpf xaml uwp


    【解决方案1】:

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

    {Binding ElementName=Page, Path=MyProperty}
    

    但是,要使{Binding} 起作用,MyProperty 实际上必须是一个属性。从您的示例代码(使用 var 这也是无效的)看来它只是一个普通字段,所以您需要类似:

    public string MyProperty {get;set;}
    

    要获得PropertyChanged 通知,您需要添加一个支持字段并触发PropertyChanged 事件。

    但是,总体而言,更好的解决方案是将DataTemplate 需要的所有信息包含到绑定到它的实际项目中。这意味着 - 您将为项目创建自定义视图模型类型,其中将包含您控制可见性所需的信息。

    【讨论】:

    • 谢谢!我在您建议之前尝试过,包括使用 x:Name 和 Property 和 PropertyChanged。问题是我是在课外做的。您在同一页面内使用的解决方案有效。
    猜你喜欢
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 2020-09-30
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多