自定义控件数据绑定 wpf
Custom Control DataBinding wpf
目前正在实现一个自定义控件我想直接从我的 viewModel 绑定一些值而不使用 xaml。
我可以做到:
<customControls:MyControl MyValue="{Binding ElementName=MyElem, Path=Text}">
<Textbox Text="{Binding Mytext}" />
但不是:
<customControls:MyControl MyValue="{Binding MyText}">
控件在模板中定义,在控件代码中我的 MyProperty 定义为:
public static readonly DependencyProperty MyValueProperty = DependencyProperty.Register("MyValue", typeof(double), typeof(CustomOEE), new FrameworkPropertyMetadata((Double)20,FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public double MyValue
{
get
{
return (double)GetValue(MyValueProperty);
}
set
{
SetValue(MyValueProperty, value);
}
}
非常感谢您的帮助
作为一般性回答,在 UserControl 中,您仅绑定到 UserControl DependencyProperties,并使用 ElementName 或 RelativeSource 绑定来执行此操作,并且您应该从不 在 UserControl 中设置 DataContext。
public static readonly DependencyProperty MyOwnDPIDeclaredInMyUcProperty =
DependencyProperty.Register("MyOwnDPIDeclaredInMyUc",
typeof(string), typeof(MyUserControl));
public string MyOwnDPIDeclaredInMyUc
{
get
{
return (string)GetValue(MyOwnDPIDeclaredInMyUcProperty);
}
set
{
SetValue(MyOwnDPIDeclaredInMyUcProperty, value);
}
}
xaml
<UserControl x:Name="myRealUC" x:class="MyUserControl">
<TextBox Text="{Binding ElementName=myRealUC, Path=MyOwnDPIDeclaredInMyUc, Mode=TwoWay}"/>
<UserControl>
如果这样做,您可以在任何视图中轻松使用此用户控件,例如:
<myControls:MyUserControl MyOwnDPIDeclaredInMyUc="{Binding MyPropertyInMyViewmodel}"/>
目前正在实现一个自定义控件我想直接从我的 viewModel 绑定一些值而不使用 xaml。 我可以做到:
<customControls:MyControl MyValue="{Binding ElementName=MyElem, Path=Text}">
<Textbox Text="{Binding Mytext}" />
但不是:
<customControls:MyControl MyValue="{Binding MyText}">
控件在模板中定义,在控件代码中我的 MyProperty 定义为:
public static readonly DependencyProperty MyValueProperty = DependencyProperty.Register("MyValue", typeof(double), typeof(CustomOEE), new FrameworkPropertyMetadata((Double)20,FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public double MyValue
{
get
{
return (double)GetValue(MyValueProperty);
}
set
{
SetValue(MyValueProperty, value);
}
}
非常感谢您的帮助
作为一般性回答,在 UserControl 中,您仅绑定到 UserControl DependencyProperties,并使用 ElementName 或 RelativeSource 绑定来执行此操作,并且您应该从不 在 UserControl 中设置 DataContext。
public static readonly DependencyProperty MyOwnDPIDeclaredInMyUcProperty =
DependencyProperty.Register("MyOwnDPIDeclaredInMyUc",
typeof(string), typeof(MyUserControl));
public string MyOwnDPIDeclaredInMyUc
{
get
{
return (string)GetValue(MyOwnDPIDeclaredInMyUcProperty);
}
set
{
SetValue(MyOwnDPIDeclaredInMyUcProperty, value);
}
}
xaml
<UserControl x:Name="myRealUC" x:class="MyUserControl">
<TextBox Text="{Binding ElementName=myRealUC, Path=MyOwnDPIDeclaredInMyUc, Mode=TwoWay}"/>
<UserControl>
如果这样做,您可以在任何视图中轻松使用此用户控件,例如:
<myControls:MyUserControl MyOwnDPIDeclaredInMyUc="{Binding MyPropertyInMyViewmodel}"/>