English 中文(简体)
对两个文本箱具有约束力的数据
原标题:Data binding for two textbox
  • 时间:2011-10-25 01:40:00
  •  标签:
  • c#
  • wpf

我有2个文本箱,各有不同的清单。 第一文本箱应显示Xml文档中的数据。 因此,在点击文本箱时,第一文本箱中的数据将显示在第二文本箱中。 我之所以这样做,是进行了非常大的回合,在一点点点击具体物体并附上另一个清单。 是否通过在xaml的元素名上具有约束力的方式来做到这一点? 我在方框1中的内容是案文箱2的名称。 我试图这样做,但我不相信我的道路是什么?

不包括我的Xaml。

<Window x:Class="GridViewTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:diag="clr-namespace:System.Diagnostics;assembly=WindowsBase"
    xmlns:local="clr-namespace:GridViewTest"
    Title="MainWindow" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DesignHeight="541" d:DesignWidth="858" SizeToContent="WidthAndHeight">
<Window.Resources>
    <local:PacketList x:Key="PacketList"/>
    <local:BindableSelectionTextBox x:Key="BindableSelectionTextBox"/>
</Window.Resources>
<Grid Height="500" Width="798">
    <Grid.RowDefinitions>
        <RowDefinition Height="142*" />
        <RowDefinition Height="145*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="234*" />
        <ColumnDefinition Width="233*" />
    </Grid.ColumnDefinitions>
    <ListView ItemsSource="{Binding}" x:Name="lvItems" Grid.RowSpan="2" Grid.ColumnSpan="2">
        <ListView.View>
            <GridView AllowsColumnReorder="True">
                <GridViewColumn Header="Header" Width="200">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <Grid>
                                <TextBox Name ="A" Tag="Header" Text="{Binding SelectedText, Path=headerObj.headervalue}" PreviewMouseLeftButtonUp="Handle_Click"
                                         IsReadOnly="True" BorderThickness="0" >
                                </TextBox>
                            </Grid>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>
    <ListView Margin="0,245,0,8" Grid.ColumnSpan="2" Grid.RowSpan="2" >
        <TextBox  Name="headText" Text="{Binding SelectedText,ElementName=A}"/>
    </ListView>    
</Grid>

最佳回答

首先,让我们在《世界森林框架》中就<条码>进行一些教育。 在计生联中,在<条码>栏目内的任何装饰仅限在<条码>上。 模板中点名的任何内容也可在模板外查询<编码>Bled.ElementName。

www.un.org/Depts/DGACM/index_spanish.htm 因此,在您的案例中,文本BoxA不能通过文本BoxheadText作为文本箱子<代码>A在<编码>下名列。 GridViewColumn.CellTemplate .

另外,为什么是<条码>theadText。 缩略语 ItemsControls such as ListBox,ListView/code>,DataGrid不应用作单项内容的小组或集装箱。 它们的意图是展示多个项目。

   <Grid Margin="0,245,0,8" Grid.ColumnSpan="2" Grid.RowSpan="2" >
       <TextBox  Name="headText" Text="{Binding SelectedText,ElementName=A}"/>
   </Grid>

页: 1

   <ContentControl Margin="0,245,0,8" Grid.ColumnSpan="2" Grid.RowSpan="2" >
       <TextBox  Name="headText" Text="{Binding SelectedText,ElementName=A}"/>
   </ContentControl>

现在,在两个文本箱之间同步进行选择,使用以下trick计......

<>XAML

    <TextBox Name="SelectionSource"
             Tag="{Binding ElementName=SelectionTarget}"
             SelectionChanged="SelectionSource_SelectionChanged" />
    <TextBox Name="SelectionTarget"
             Text="{Binding SelectedText, ElementName=SelectionSource,
                            Mode=TwoWay, UpdateSourceTrigger=Explicit}" />

www.un.org/Depts/DGACM/index_spanish.htm 《刑法》

    private void SelectionSource_SelectionChanged(object sender, RoutedEventArgs e)
    {
        var targetTextBox = ((TextBox) sender).Tag as TextBox;
        if (targetTextBox != null)
        {
            var bndExp
                = BindingOperations.GetBindingExpression(
                    targetTextBox, TextBox.TextProperty);

            if (bndExp != null)
            {
                bndExp.UpdateTarget();
            }
        }
    }

如果你使用多国公司,则在所附行为中处理<代码>当选/编码>活动。

EDIT 2:

现在,如果一个文本箱是清单Box模板的一部分,而另一个箱在模板之外,则使用内容控制黑板......

XAML:

   <Window.Resources>      
    <TextBox x:Key="SelectionTarget"
             Text="{Binding Tag.SelectedText,
                            RelativeSource={RelativeSource Self},
                            Mode=TwoWay,
                            UpdateSourceTrigger=Explicit}" />
  </Window.Resources>

  <StackPanel>
     <ListBox>
        <ListBox.ItemsSource>
            <x:Array Type="{x:Type System:String}">
                <System:String>Test String 1</System:String>
                <System:String>Test String 2</System:String>
                <System:String>Test String 3</System:String>
            </x:Array>
        </ListBox.ItemsSource>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBox Name="SelectionSource"
                         Text="{Binding Path=., Mode=TwoWay}" 
                         Tag="{StaticResource SelectionTarget}"
                         SelectionChanged="SelectionSource_SelectionChanged" />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

    <ContentControl Content="{StaticResource SelectionTarget}">           
    </ContentControl>

</StackPanel>

<><>Code Behind

    private void SelectionSource_SelectionChanged(
       object sender, RoutedEventArgs e)
    {
        var targetTextBox
             = ((TextBox) sender).Tag as TextBox;
        if (targetTextBox != null)
        {
            targetTextBox.Tag = (TextBox) sender;

            var bndExp
                = BindingOperations.GetBindingExpression(
                    targetTextBox, TextBox.TextProperty);

            if (bndExp != null)
            {
                bndExp.UpdateTarget();
            }
        }
    }

Hope this helps.

问题回答

我并不真心实意地确定你试图约束的“S selectedText”活动,但如果你试图这样做的话,就会显示“lvItems”选择。 您的“标题”案文中的项目案文 方框2. 工作应当

<TextBox Name="headText" Text="{Binding ElementName=lvItems, Path=SelectedItem.headerObj.headervalue}" />

你们也需要改变文本Box的“A”约束力。

<TextBox Name ="A" Tag="Header" Text="{Binding headerObj.headervalue}" IsReadOnly="True" BorderThickness="0" >
</TextBox>

假定该负责人 Obj是包装单类别的财产,头盔是该类别的财产,头盔是你希望约束的价值。

“批量”中的案文将更新选定的项目(而不是在标注案文Box时)。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...