WPF 用户控件将数据绑定到用户控件属性

Posted

技术标签:

【中文标题】WPF 用户控件将数据绑定到用户控件属性【英文标题】:WPF user control bind data to user control property 【发布时间】:2013-08-29 23:27:54 【问题描述】:

我有用户控制权:

xaml

<UserControl x:Class="controlmaker.checkButton"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="114" d:DesignWidth="221">
<Grid Background="Aqua" >
    <CheckBox Content="CheckBox" Height="16" HorizontalAlignment="Left" Margin="58,24,0,0" Name="checkBox1" VerticalAlignment="Top" />
    <Button Content="Binding buttText" Height="23" HorizontalAlignment="Left" Margin="58,57,0,0" Name="button1" VerticalAlignment="Top" Width="75" />
</Grid>
</UserControl>

后面的代码

public partial class checkButton : UserControl

    public checkButton()
    
        InitializeComponent();
    


    public static readonly DependencyProperty buttTextProperty =
DependencyProperty.Register("buttText", typeof(String),
typeof(checkButton), new FrameworkPropertyMetadata(string.Empty));

    public String buttText
    
        get  return GetValue(buttTextProperty).ToString(); 
        set  SetValue(buttTextProperty, value); 
    



和主窗口 xaml

<Window x:Class="controlmaker.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525" xmlns:my="clr-namespace:controlmaker">
<Grid>
    <my:checkButton buttText="aka"  HorizontalAlignment="Left" Margin="145,115,0,0" x:Name="checkButton1" VerticalAlignment="Top" Height="133" Width="250" />
</Grid>
</Window>

我想在窗口 xaml 中绑定用户控件属性并将其在用户控件中绑定到按钮内容属性。怎么做?

【问题讨论】:

【参考方案1】:

您可以在用户控件中尝试元素绑定。只需为 UserControl 命名并绑定属性:

<UserControl x:Class="controlmaker.checkButton"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="114" d:DesignWidth="221"
         x:Name="MyUserControl">
<Grid Background="Aqua" >
    <CheckBox Content="CheckBox" Height="16" HorizontalAlignment="Left"
          Margin="58,24,0,0" Name="checkBox1" VerticalAlignment="Top" />
    <Button Content="Binding Path=buttText, ElementName=MyUserControl"
          Height="23" HorizontalAlignment="Left" Margin="58,57,0,0" 
          Name="button1" VerticalAlignment="Top" Width="75" />
</Grid>
</UserControl>

然后您可以从用户控件使用位置绑定或放置静态文本

<my:checkButton buttText="aka" />

  <my:checkButton buttText="Binding SomeProperty" />

【讨论】:

任何人更感兴趣如何使它更正确,我强烈推荐link 如何指定应将哪种类型的 VM 用户控件视为参考数据?想象一下,那个虚拟机不在同一个命名空间中,等等 问题是 - 在自己的 xaml 中绑定用户控件属性,当前示例不使用 MVVM 模式,如果您需要在用户控件中使用 MVVM 和绑定视图模型,那么您必须设置用户控件的 DataContext查看模型实例,或者如果您需要类型引用,请考虑 DataTemplate:***.com/questions/3149117/…

以上是关于WPF 用户控件将数据绑定到用户控件属性的主要内容,如果未能解决你的问题,请参考以下文章

wpf 自定义控件的自定义属性的数据绑定问题

WPF:将静态资源绑定到用户控件中的依赖项属性

WPF - 将 UserControl 可见性绑定到属性

将用户控件绑定到布尔属性的对面

设置绑定到 WPF 用户控件内的自定义 DependencyProperty

强制验证 WPF 中的绑定控件