2017-04-26 11 views
0

Xamlとバインディングの概念が新しくなりました。 MainClassの 'CustomerName'プロパティをXAMLのテキストコンテンツ 'TextBox1'にバインドする方法は?ここでテキストボックステキストを他のクラスプロパティとバインドする方法は?

namespace TextBinding.Module 
{ 
    public class MainClass 
    { 
     public string CustomerName { get; set; } 
    } 

} 

私MainClassですそして、私のXAMLコーディングがあり、

<UserControl x:Class="TextBinding.Design.ControlDesigner" 
     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" 
     xmlns:TestControl="clr-namespace:TextBinding.Module" 
     mc:Ignorable="d" d:DesignHeight="1000" d:DesignWidth="1000"> 

    <TestControl:MainClass x:Key="Test1" /> 
    <Grid> 
     <TextBox x:Name="TextBox1" Height="50" Text="{Binding Test1.CustomerName, Mode=TwoWay}" /> 
    </Grid> 
</UserControl> 

これ以上の方法は、全く機能していません。誰かがバインドするより良い方法を提案することができますか?前もって感謝します。

+0

はhttps://msdn.microsoft.com/en参照-us/library/system.componentmodel.inotifypropertychanged(v = vs.110).aspx –

+1

_ "全く動作していません" _ St​​ack Overflowの質問には、それよりも正確な問題文が含まれていることが予想されます。つまり、投稿したコードはまったく有効ではないようです。それがうまくいくと思った理由は困惑しています。そのドキュメントを読んでそこのいくつかの例に従ってください。それがあなたの誤解を解決しない場合は、Web上のさまざまなチュートリアルやStack Overflowに関するデータバインディングに関する質問を見てください。質問を投稿する前に[mcve]と[ask]をお読みください。 –

+0

これまでのところ、 'MainClass'オブジェクトは' UserControl'の子であってはならず、リソースでもありません。それは 'UserControl'なので、' UserControl'自体の 'DataContext'を避けたいのですが、例えば' DataContext'にすることができます。あなたの 'UserControl'に' Grid'があります。次に、 'Test1.CustomerName'の代わりに' CustomerName'にバインドすることができます。 –

答えて

0
<UserControl x:Class="TextBinding.Design.ControlDesigner" 
      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" 
      xmlns:TestControl="clr-namespace:TextBinding.Module" 
      mc:Ignorable="d" d:DesignHeight="1000" d:DesignWidth="1000"> 
    <UserControl.Resources> 
      <TestControl:MainClass x:Key="Test1" /> 
     </UserControl.Resources> 

     <Grid> 
      <TextBox x:Name="TextBox1" Height="50" Text="{Binding CustomerName, Mode=TwoWay}" 
DataContext="{DynamicResource Test1}" /> 
     </Grid> 
    </UserControl> 

ユーザーコントロールリソースセクション内にクラスオブジェクトを定義する必要があります。また、テキストボックスのDataContextプロパティにクラスオブジェクトを指定する必要があります。

0

これは良い考えではありません。MVVMを試して、別のビュー、モデルを表示してこの種の処理を行う必要があります。

しかし、以下のご質問には答えである:

新しいWPFアプリケーションを作成し、次の手順を実行します:

    ここ

    public partial class ControlDesigner: UserControl 
        { 
    
         public string CustomerName { get; set; } 
    
        public MainWindow() 
        { 
         // Set Value 
         // CustomerName = "Test Name"; 
         InitializeComponent(); 
         this.DataContext = this; 
        } 
    } 
    

    は、質問用のサンプルMVVMのアプローチです

  1. ユーザーコントロールを含むMainwindow.xamlがあります。

    <Grid> 
        <local:ControlDesigner Grid.Row="1" /> 
    </Grid> 
    
  2. のViewModelを作成し、ViwModelにユーザーメインウィンドウののDataContextを設定します。

     public class MainWindowViewModel   
         { 
          private string _customeName; 
    
          public string CustomerName 
          { 
           get { return _customeName; } 
           set { _customeName = value; } 
          } 
    
    
         } 
    
         public partial class MainWindow : Window 
         { 
    
    
          public MainWindow() 
          { 
           InitializeComponent(); 
           this.DataContext = new MainWindowViewModel(); 
          } 
         } 
        } 
    
  3. バインド親ウィンドウのモデルを表示するためのテキストブロック:

    のTextBlockテキスト= "{CustomerNameのバインディング}">

+1

UserControlのDataContextを明示的に設定する必要はありません。そのようにすると、UserControlが親コントロールまたはウィンドウからDataContextを継承し、コントロールの依存関係プロパティへのバインディングを中断することがあります。例えば、ここ:http://stackoverflow.com/a/28982771/1136211。 – Clemens

+0

@クレメンス、同意する、私はこれを念頭に置く。しかし、OPはViewとView-Modelの間で、あるいはこのケースではコードの後ろでさえどうなるのかをOPが認識していないので、この答えを開いたままにしておきます – Simsons

+0

この質問に真剣に答えているなら、 UserControlが使用されているウィンドウのDataContext内のインスタンス。 – Clemens

関連する問題