【问题标题】:wp7 c# get control data contextwp7 c#获取控制数据上下文
【发布时间】:2013-09-30 10:25:09
【问题描述】:

我有一个列表框,其项目模板是用户控件:

<ListBox
     x:Name="ChatBox"
     Width="450"
     ItemsSource="{Binding ChatMessage}">
          <ListBox.ItemTemplate>
              <DataTemplate>
                    <local:ChatItem DataContext="{Binding ChatMessage}"/>
              </DataTemplate>
          </ListBox.ItemTemplate>
</ListBox>

在我的代码后面:

messages = new ObservableCollection<ChatMessage>(dbMessages);
ChatBox.ItemsSource = messages;

如何从控件内部获取绑定元素,即聊天消息对象?

感谢您的帮助

【问题讨论】:

  • 您是否也在代码隐藏中设置了 ItemSource?你能把你的 C# 代码也贴上来让我们看看吗?

标签: c# windows-phone-7 data-binding user-controls windows-phone


【解决方案1】:

您的 ChatItem 用户控件会自动将其 Datacontext 获取到 ChatMessage 对象。不需要重新设置。并且要将用户控件的属性绑定到 ChatMessage 对象属性,那么您的 ChatItem 属性必须是依赖属性,如果您已经拥有它们,那么只需将它们绑定到 ChatMessage 属性,就像这样。

<ListBox
 x:Name="ChatBox"
 Width="450"
 ItemsSource="{Binding ChatMessage}">
      <ListBox.ItemTemplate>
          <DataTemplate>
                <local:ChatItem DataContext="{Binding ChatMessage}" ChatItemDependencyProperty = "{Binding Path=ChatMessageProperty}" />
          </DataTemplate>
      </ListBox.ItemTemplate>

希望对你有帮助..

【讨论】:

  • 是的,我知道,但问题是我的 ChatMessage 中有一定的值,根据这个值我需要设置某个面板(左或右)的水平对齐属性。那么如何在不检索聊天消息的情况下做到这一点呢?
  • 这个“确定值”是什么?它存储在 ChatMessage 类的某些属性中吗?这个“一些面板”在你的用户控件(ChatItem)中吗?
  • 假设我有一个消息方向的枚举值(1:我,2:他),根据这个值,我必须在 CHatItem 控件中设置主面板左或右。够清楚吗?
  • 好的。你要做的是..首先在你的chatitem用户控件中创建一个int或string的depencyproperty并绑定它ChatMessage枚举值(确保类型(int或string)相同..然后在您的chatitem depencyproperty on change事件处理程序中检查它的值是什么..并在此基础上设置您的面板向左或向右.希望它对您有所帮助..因为用户控件之间的通信方式是depencyprop.它也使您的用户控件独立
  • 但除非我明确更改此值,否则不会触发 onchange 事件处理程序。 onchange 事件不会在初始化时触发,这是我想要的。我们现在回到最初的问题:如何访问我的聊天消息对象以获取方向属性
猜你喜欢
  • 2012-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多