使用 MVVM 模式绑定嵌套控件

发布于 2024-12-01 19:00:35 字数 2091 浏览 0 评论 0原文

我在将嵌套控件与 MVVM 模式绑定时遇到问题。这是我的 XAML 代码:

 <ItemsControl Grid.Column="1" ItemsSource="{Binding NotificationContacts}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <toolkit:Expander>
                        <toolkit:Expander.Header>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto" />
                                    <ColumnDefinition Width="Auto" />
                                    <ColumnDefinition Width="Auto" />
                                </Grid.ColumnDefinitions>
                                <TextBlock Text="{Binding ContactName}" Grid.Column="0" VerticalAlignment="Center"></TextBlock>
                                <Image Source="Images/answer_ok.png" Grid.Column="1" Margin="15,0,15,0" Width="27" Height="27"></Image>
                            </Grid>
                        </toolkit:Expander.Header>
                        <toolkit:Expander.Content>
                            <ListBox Margin="30,10,0,10" ItemsSource="{Binding NotificationContacts.Messages">
                                <ListBox.ItemTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding MessageName}"></TextBlock>
                                    </DataTemplate>
                                </ListBox.ItemTemplate>
                            </ListBox>
                        </toolkit:Expander.Content>
                    </toolkit:Expander>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>

问题是,位于 ExpanderControl 数据模板中的列表框控件未进行数据绑定。 列表框控件由名为“Messages”的 EntityCollection 填充,该实体集合包含在与 ItemsControl 进行数据绑定的父对象“NotificationContacts”中...

有谁知道如何解决此问题?

提前致谢 !!!

I have a problem with binding nested control with my MVVM pattern. This is my XAML code:

 <ItemsControl Grid.Column="1" ItemsSource="{Binding NotificationContacts}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <toolkit:Expander>
                        <toolkit:Expander.Header>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto" />
                                    <ColumnDefinition Width="Auto" />
                                    <ColumnDefinition Width="Auto" />
                                </Grid.ColumnDefinitions>
                                <TextBlock Text="{Binding ContactName}" Grid.Column="0" VerticalAlignment="Center"></TextBlock>
                                <Image Source="Images/answer_ok.png" Grid.Column="1" Margin="15,0,15,0" Width="27" Height="27"></Image>
                            </Grid>
                        </toolkit:Expander.Header>
                        <toolkit:Expander.Content>
                            <ListBox Margin="30,10,0,10" ItemsSource="{Binding NotificationContacts.Messages">
                                <ListBox.ItemTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding MessageName}"></TextBlock>
                                    </DataTemplate>
                                </ListBox.ItemTemplate>
                            </ListBox>
                        </toolkit:Expander.Content>
                    </toolkit:Expander>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>

The problem is, that the listbox control located in ExpanderControl Data Template is not being data bound.
Listbox control is populated by EntityCollection named 'Messages' which is contained in parent object 'NotificationContacts' that ItemsControl is databound with...

Does anyone know how to resolve this issue ?

Thanks in advance !!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

陈甜 2024-12-08 19:00:35

您是否尝试过此操作:

<ItemsControl Grid.Column="1" ItemsSource="{Binding NotificationContacts}">
  ......
   <ListBox Margin="30,10,0,10" ItemsSource="{Binding Messages}">
  .....
       <TextBlock Text="{Binding MessageName}"></TextBlock>

如果我没记错的话,当您位于 ItemContol“内部”时,绑定上下文将设置为NotificationContacts。因此,仅使用“{Binding Messages}”就可以了。

顺便说一下,您缺少了该行的大括号:

<ListBox Margin="30,10,0,10" ItemsSource="{Binding NotificationContacts.Messages">

Did you try this:

<ItemsControl Grid.Column="1" ItemsSource="{Binding NotificationContacts}">
  ......
   <ListBox Margin="30,10,0,10" ItemsSource="{Binding Messages}">
  .....
       <TextBlock Text="{Binding MessageName}"></TextBlock>

If I remember it right, when you are "inside" ItemContol, binding context is set to NotificationContacts. So use just "{Binding Messages}" could be fine.

And by the way, you are missing curly bracket on the line:

<ListBox Margin="30,10,0,10" ItemsSource="{Binding NotificationContacts.Messages">
烟雨凡馨 2024-12-08 19:00:35

调用 ItemsControl fi“ic”并使用 ListBox 中的下一个绑定

<ItemsControl x:Name="ic" Grid.Column="1" ItemsSource="{Binding NotificationContacts}">
     ...
     <ListBox Margin="30,10,0,10" ItemsSource="{Binding ElementName=ic, Path=DataContext.Messages}">

Call ItemsControl f.i. "ic" and use next binding in ListBox

<ItemsControl x:Name="ic" Grid.Column="1" ItemsSource="{Binding NotificationContacts}">
     ...
     <ListBox Margin="30,10,0,10" ItemsSource="{Binding ElementName=ic, Path=DataContext.Messages}">
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文