2013-08-27 3 views
15

I haben Benutzersteuerung:WPF Benutzersteuerung bind Daten an Benutzersteuer Eigenschaft

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> 

Code hinter

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); } 
    } 


} 

und Hauptfenster 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> 

I möchte Benutzersteuerelement binden rty im Fenster xaml und binden Sie es im Benutzersteuerelement an button content property. Wie es geht?

+21

Das 'butt' Präfix Nichts ist das beste. #facepalm – CodeAngry

+0

@CodeAnry einverstanden: D – NirmalL

Antwort

32

Sie können Element Bindung innerhalb des Benutzersteuerelements versuchen. Geben Sie einfach einen Namen Usercontrol und binden Eigenschaft:

<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> 

Und dann können Sie binden oder setzen statischen Text von Benutzersteuer Nutzung Ort

<my:checkButton buttText="aka" /> 

oder

<my:checkButton buttText="{Binding SomeProperty}" /> 
+9

Jeder mehr daran interessiert, wie es richtiger zu machen, ich empfehle sehr [link] (http://www.scottlogic.com/blog/2012/02/06/a-simple-pattern- for-creating-re-usable-usercontrols-in-wpf-silverlight.html) – newman

+0

Wie legen Sie fest, welche Art von VM-Benutzersteuerung als Referenzdaten betrachtet werden soll? Stellen Sie sich vor, dass VM nicht im selben Namensraum ist, usw. – stenly

+1

Frage war - um Benutzersteuerungseigenschaft in seinem eigenen xaml zu binden, verwendet das aktuelle Beispiel kein MVVM-Muster, wenn Sie MVVM verwenden und Ansichtsmodell in Benutzersteuerung binden müssen Setzen Sie DataContext des Benutzersteuerelements auf View Model instance oder, wenn Sie type referencing benötigen, beachten Sie DataTemplate: http://stackoverflow.com/questions/3149117/how-to-automatic-use-a-datatemplate-based-on-contentcontrols-current-- conten –