开发者

Custom Dependency Property - Binding doesn't work

I am preparing Custom UserControl, which will be located in a DataGrid. DataContext for this control will be row id (from DB) and Value of ComboBox located under the DataGrid.

This is how I embed my control in DataGrid:

<datagrid:DataGridTemplateColumn>
  <datagrid:DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
       <nmspc:MyControl IdT="{Binding id}" BValue="{Binding SelectedValue, ElementName=MyComboBox}" />
    </DataTemplate>
  </datagrid:DataGridTemplateColumn.CellTemplate>
</datagrid:DataGridTemplateColumn>

Values which I want to bind are id and selection of MyComboBox. This is how MyControl Code behind looks like:

public static readonly DependencyProperty IdTProperty = DependencyProperty.Register("IdT", typeof(int), typeof(MyControl), new PropertyMetadata(IdTChanged));

private static void IdTChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
  //BoxResult obj = d as MyControl;
  MessageBox.Show(e.NewValue.ToString());
  //obj.IdT = (int)e.NewValue;
}
public int IdT
{
  set {SetValue(IdTProperty, value); }
  get {return (int)GetValue(TEIdProperty); }
}

public static readonly DependencyProperty BValueProperty = DependencyProperty.Register("BValue", typeof(string), typeof(MyControl), new PropertyMetadata(IdTChanged));

private static void BValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
  //BoxResult obj = d as MyControl;
  MessageBox.Show(e.NewValue.ToString());
  //obj.IdT = (string)e.NewValue;
}
public int BValue
{
  set {SetValue(BValueProperty, value); }
  get {return (int)GetValue(BValueProperty); }
}

Binding mechanism isn't working with my code. I am expecting that callbacks IdTChanged and BValueChanged will be called, but they won't. Writing this code I based on this. Thanks in advance for all sugestions.

Regards, Pawel

Edit:

This is how looks debug output:

System.Windows.Data Error: BindingExpression path error: 'id' property not found on 'My.MyControls.MyView.DataParams' 'My.MyControls.MyView.DataParams' (HashCode=42491497). BindingExpression: Path='id' DataItem='My.MyControls.MyView.DataParams' (HashCode=42491497); target element is 'My.MyControls.MyView.MyControl' (Name=''); target property is 'IdT' (type 'System.Int32')..
System.Windows.Data Error: BindingExpression path error: 'id' property not found on '852' 'System.Int32'开发者_JS百科 (HashCode=852). BindingExpression: Path='id' DataItem='My.MyControls.MyView.DataParams' (HashCode=42491497); target element is 'My.MyControls.MyView.MyControl' (Name=''); target property is 'IdT' (type 'System.Int32')..

I found that is problem with RelativeSource. So in binding I set this value:

RelativeSource={RelativeSource TemplatedParent}

Problem with BindingExpression disappeard, but still it doesn't work (MessageBox in IdTChanged is not shown).

Some suggestions?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜