2016-12-05 23 views
1

UWPアプリケーションでは、私はデータ型を持つListviewを持っています。 ListViewは、ItemsSource経由でモデルのObservableCollectionにバインドされます。DataTemplateのdatacontextプロパティをusercontrol依存関係プロパティにバインド

<ListView SelectionMode="None" 
       ItemTemplate="{StaticResource MydataTemplate}" 
       ItemsSource="{Binding Meals, Mode=OneWay}" 

食事モデルミールのObservableCollectionである:

public class Meal 
{ 
    public string restaurantId { get; set; } 
    public double price { get; set; } 
    public int Quantity { get; set; } = 0; 
} 

内部リストビューDataTemplateを、私は(リストビューの各要素は、このユーザーコントロールを持っている)ユーザーコントロールを持っています。

<DataTemplate x:Key="mydataTemplate"> 
    ... 
    <ccontrol:MyUC Value="{Binding Quantity, Mode=TwoWay}" Grid.Column="2" /> 
    ... 
</DataTemplate> 

ユーザーコントロールDP付き::私は、ユーザーコントロールの依存proeprtyに、現在の食事量(数量プロパティ)をバインドしたい

public sealed partial class MyUC : UserControl 
{ 
    public MyUC() 
    { 
     this.InitializeComponent(); 
     this.DataContext = this; 
    } 

    public int Value 
    { 
     get { return (int)GetValue(ValueProperty); } 
     set { SetValue(ValueProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for Value. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty ValueProperty = 
     DependencyProperty.Register("Value", typeof(int), typeof(ResaNumUpDown), new PropertyMetadata(0)); 

しかし、実行時に、私はバインディング式の誤差があります。

エラー:BindingExpressionパスエラー:「数量」プロパティ「Project.MyUC」

に見つからないことがユーザーコントロールを検索し、しかし、私は量Pを検索しますDataTemplateデータコンテキストでのルーティン。

I red this post多くの人を助けない人。あなたはMyUCコンストラクタで行うように事前に

おかげで、

よろしく

答えて

1

は明示的、UserControlのDataContextを設定しないでください。これを行うと、UserControlの親コントロールからDataContextを継承できなくなります。

public MyUC() 
{ 
    this.InitializeComponent(); 
    // this.DataContext = this; // remove this line 
} 

<ccontrol:MyUC Value="{Binding Quantity}" /> 

電流のプロパティQuantityを期待するように結合ここで、リストビューのItemsSourceコレクション内の現在の要素でのDataContextは、(継承)。これは、明示的にDataContextを設定した場合は機能しません。

<UserControl ... x:Name="self"> 
    ... 
    <TextBlock Text="{Binding Value, ElementName=self}" /> 
    ... 
</UserControl> 
+0

おかげで、それが動作するようになりました:UserControlのXAMLで

は、それがのバインディングElementNameプロパティを指定することによって、そのソースとしてのUserControlを取るようにバインディングを書き込みます。 :) – ArthurCPPCLI

関連する問題