【问题标题】:WPF XAML BindingWPF XAML 绑定
【发布时间】:2011-07-15 23:05:58
【问题描述】:

你好 我对想要执行的绑定有疑问,但找不到任何有关如何执行此操作的信息。 基本上我想将一个对象绑定到另一个对象的属性。 例如

<TextBox Text="test" Tag="{Binding ElementName=TxtBx2}" x:Name="TxtBx1"/>
<TextBox Text="test" x:Name="TxtBx2"/>

这有点奇怪,但它有助于我正在实现的代码,所以对于一个对象的属性,我想在 xaml 中绑定另一个对象。

我不知道这是否可能,任何指针都会有所帮助 谢谢,鲁本

【问题讨论】:

    标签: wpf xaml binding


    【解决方案1】:

    你就是这样做的;你只需要指定Path

    <TextBox Text="test" Tag="{Binding ElementName=TxtBx2, Path=Text}" x:Name="TxtBx1"/>
    <TextBox Text="test" x:Name="TxtBx2"/>
    

    如果您想要TextBoxDataContext;那么你的路径会相应地改变。

    <TextBox Text="test" Tag="{Binding ElementName=TxtBx2, Path=DataContext}" x:Name="TxtBx1"/>
    <TextBox Text="test" x:Name="TxtBx2"/>
    

    如果您需要在 WPF 应用程序中使用 Tag 属性,您可能需要重新评估您的方法,因为自从从 WinForms 迁移以来,我还没有使用过 Tag 属性,因为该需求已被利用WPF 中的数据绑定功能。

    更新:

    如果您的目标是绑定到给定控件而不是控件上的属性;然后不要在Path 中指定属性名称。

    基于您的目标; attached behaviors 将是一种更好的方法,它允许您将功能包装在扩展的 DataGrid 中。

    【讨论】:

    • 您好,感谢您的回复,我知道我可以做到,但我想要的是对象,而不仅仅是一个属性。
    • 我以 Tag 属性为例...我需要做的是:我有一个从 wpftoolkit 数据网格扩展而来的数据网格和一个作为该数据网格的寻呼机的用户控件,所以当我移动到另一个页面时,我需要对数据网格进行一些处理,所以如果我可以在数据网格中使用寻呼机,我可以收听该寻呼机的事件,这听起来很愚蠢,但这是我目前最好的主意。 ...也许我需要采取另一种方法...欢迎任何想法
    • @Ruben 更新了答案;请记住,如果您采用 MVVM 方法,则在此实例中为 TextBox 的控件下的数据应该可以通过您的 ViewModel 从控件外部访问。最重要的是,在大多数情况下,您不需要转到控件来获取数据。
    • @Ruben 再次更新答案;附加的行为/触发器应该适合您的需求......
    • 正确知道我没有使用 mvvm,我只想将这两个控件用作一个单独的控件,一个数据网格,如果窗口中存在分页器并与之关联,则可以分页数据网格。所以当我将它与 mvvm 一起使用时,我只需要将网格的 itemsource 绑定到 viewmodel 属性......我将看看附加的行为
    【解决方案2】:

    假设您希望 TxtBx1 的 Text 属性的值是 TxtBx2 中的 Text 属性的值,您可以使用:

    <TextBox x:Name="TxtBx1" Text="{Binding ElementName=TxtBx2, Path=Text}" />
    <TextBox x:Name="TxtBx2" Text="test" />
    

    更新

    假设(可能再次错误!)您想将 TxtBx1 元素绑定到 TxtBx2 的标签,您将使用:

    <TextBox x:Name="TxtBx1" Text="test" />
    <TextBox x:Name="TxtBx2" Tag="{Binding ElementName=TxtBx1}" Text="test" />
    

    只是出于兴趣,你为什么要做这样的事情?

    更新 2

    假设您有一个从 wpftoolkit 数据网格扩展而来的 Datagrid 和一个作为该 Datagrid 的寻呼机的用户控件,并且当您移动到另一个页面时,您需要对 datagrid 进行一些处理,那么为什么不'您不只是更新页面更改事件中的数据网格(如果使用后面的代码),还是更新数据网格在视图模型上的页面更改动词中绑定到的项目(如果使用 MVVM)?

    【讨论】:

    • 您好,感谢您的回复,我知道我可以做到,但我想要的是对象,而不仅仅是一个属性。
    • 我需要做的是:我有一个从 wpftoolkit 数据网格扩展而来的数据网格和一个作为该数据网格的寻呼机的用户控件,所以当我移动到另一个页面时,我需要做一些在数据网格上处理,所以如果我可以在数据网格中有寻呼机,我可以收听该寻呼机的事件,这听起来很愚蠢,但这是我现在最好的主意......也许我需要采取另一种方法。 ...欢迎任何想法
    • 我可以这样做,但我不想在需要分页的每个表单或视图模型上编写代码,我需要一种方法来告诉网格此分页器与您相关联在 xaml 中,然后网格能够做它需要做的就是它有一个与之关联的寻呼机
    【解决方案3】:

    好吧,使用以下项目控件绑定到整个对象(而不是任何特定属性)确实有意义:

    <ListBox x:Name="pictureBox" 
    ItemsSource=”{Binding Source={StaticResource photos}}" …> 
    ......
    </ListBox>
    

    【讨论】:

    • 你能再读一遍他的问题吗?他写道:“基本上我想将一个对象绑定到另一个对象的属性。”。他没有具体说Control。我举了一个例子,整个集合(照片)绑定到ListBox的一个属性(ItemsSource)。
    【解决方案4】:
    <TextBox Text="test" Tag="{Binding ElementName=TxtBx2,Path=Text}" x:Name="TxtBx1"/>
    <TextBox Text="test" x:Name="TxtBx2"/>
    

    【讨论】:

      猜你喜欢
      • 2017-08-20
      • 2011-02-28
      • 2015-11-23
      • 2011-02-23
      • 2011-02-05
      • 2013-08-06
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多