【问题标题】:Access other xaml controls data in another control's event在另一个控件的事件中访问其他 xaml 控件数据
【发布时间】:2013-04-26 21:52:01
【问题描述】:

我有下面的列表框,我将定义的类(SavedDataClass)中的数据绑定到该列表框。当用户单击链接“更新”时,我想访问 SavedDataClass 特定实例的其他成员的全部数据。这可能吗像这样访问数据?我的意思是当列表框项实例中的一个成员被调用时如何访问其他 xxaml 控件数据..

        <ListBox x:Name="lstAreaDetails"  Grid.Row="1" Margin="0,10,0,0"  >
                        <ListBox.ItemTemplate >
                            <DataTemplate >
                                <StackPanel >

                                    <StackPanel Orientation="Horizontal">
                                        <TextBlock Foreground="White" Name="MyDateTime" Text="{Binding MyDateTime}"></TextBlock>
                                    </StackPanel>                                        
                                    <StackPanel >                                           
                                        <HyperlinkButton Content="{Binding SavedName}" Name="lnkSAvedName"  Click="HyperlinkButton_Click_1"   />
                                        <HyperlinkButton  Content="{Binding Update}" Name="lnkUpdate" Click="lnkUpdate_click"/>
                                    </StackPanel>
                                    <TextBlock   Text="{Binding ResAddress}" Name="txtResAddress" TextWrapping="Wrap" ></TextBlock>
                                    <TextBlock >OtherDetails:</TextBlock>
                                    <TextBlock  Text="{Binding Area}" Name="txtArea" TextWrapping="Wrap"></TextBlock>
                                </StackPanel>
                            </DataTemplate>

                        </ListBox.ItemTemplate>
                    </ListBox>

 public class SavedDataClass
{
    public string MyDateTime { get; set; }
    public string SavedName { get; set; }
    public string Update{ get; set; }
    public string ResAddress { get; set; }
    public string Area{ get; set; }
    public string OptionalAddressLine1{ get; set; }
    public string OptionalAddressLine2{ get; set; }
}

更新链接点击将有以下事件处理程序:

 private void lnkUpdate_click(object sender, RoutedEventArgs e)
    {
      //here I want to access other controls data e.g. MyDateTime,SavedName,ResAddress,Area,OptionalAddressLine1,OptionalAddresLine2
    }

【问题讨论】:

  • 你的数据对象(SaveDataClass)应该在点击按钮的DataContext属性中
  • 我将属性“public string Update{ get; set; }”绑定到更新按钮。

标签: c# wpf xaml binding datacontext


【解决方案1】:

在这些情况下,FrameworkElement 的Tag 属性用于传输驻留在您绑定到的DataContext 中的基础数据对象。你的代码看起来有点像这样:

<ListBox x:Name="lstAreaDetails" Grid.Row="1" Margin="0,10,0,0">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Foreground="White" Name="MyDateTime" Text="{Binding MyDateTime}"></TextBlock>
                </StackPanel>                                        
                <StackPanel >                                           
                    <HyperlinkButton Content="{Binding SavedName}" Name="lnkSAvedName"  Click="HyperlinkButton_Click_1"   />
                    <HyperlinkButton  Tag="{Binding}" Content="{Binding Update}" Name="lnkUpdate" Click="lnkUpdate_click"/>
                </StackPanel>
                <TextBlock   Text="{Binding ResAddress}" Name="txtResAddress" TextWrapping="Wrap" ></TextBlock>
                <TextBlock >OtherDetails:</TextBlock>
                <TextBlock  Text="{Binding Area}" Name="txtArea" TextWrapping="Wrap"></TextBlock>
            </StackPanel>
        </StackPanel>
    </DataTemplate>
</ListBox.ItemTemplate>

请注意,在第二个超链接按钮上,我添加了Tag 属性。您的代码隐藏看起来有点像这样:

private void lnkUpdate_click(object sender, RoutedEventArgs e)
{
    var hyperlinkButton = sender as HyperlinkButton;
    if (hyperlinkButton == null)
        return;

    var savedDataClass = hyperlinkButton.Tag as SavedDataClass;
    // Do whatever you want with the saved data class instance here...
}

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    相关资源
    最近更新 更多