在 UserControl 本身中指定 DependencyProperty 的绑定
Specify Binding of DependencyProperty in UserControl itself
跟进我之前的问题 ()
在我的 UserControl 中有一个 DependencyObject
。我想将该对象绑定到我的 ViewModel
的 属性。在这种情况下,CarViewModel
、属性 名称是 Status
和 returns 枚举值。
public partial class CarView : UserControl
{
public CarStatus Status
{
get { return (CarStatus)GetValue(CarStatusProperty); }
set { SetValue(CarStatusProperty, value); }
}
public static readonly DependencyProperty CarStatusProperty =
DependencyProperty.Register("Status", typeof(CarStatus), typeof(CarView), new PropertyMetadata(OnStatusChanged));
private static void OnStatusChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
var control = (CarView)obj;
control.LoadThemeResources((CarStatus)e.NewValue == CarStatus.Sold);
}
public void LoadThemeResources(bool isSold)
{
// change some brushes
}
}
<UserControl x:Class="MySolution.Views.CarView"
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:views="clr-MySolution.Views"
mc:Ignorable="d"
views:CarView.Status="{Binding Status}">
<UserControl.Resources>
</UserControl.Resources>
<Grid>
<TextBlock Text="{Binding Brand}"FontSize="22" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
<UserControl
我需要在哪里指定这个绑定?在 UserControl 的根目录中,它给出了一个错误:
The attachable property 'Status' was not found in type 'CarView'
在我的 MainWindow 中,我使用 ContentControl
:
绑定 CarView
<ContentControl
Content="{Binding CurrentCar}">
<ContentControl.Resources>
<DataTemplate DataType="{x:Type viewmodel:CarViewModel}">
<views:CarView />
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
我的视图模型:
[ImplementPropertyChanged]
public class CarViewModel
{
public Car Car { get; private set; }
public CarStatus Status
{
get
{
if (_sold) return CarStatus.Sold;
return CarStatus.NotSold;
}
}
}
看来您的控件正在绑定到自身。
在 CarView 中查找状态。
您的控件 CodeBehind 中应该有一行代码,例如:
this.DataContext = new ViewModelObjectWithStatusPropertyToBindFrom();
此致
你的绑定写得不好。而不是写 views:CarView.Status="{Binding Status}"
你应该只写 Status="{Binding Status}"
跟进我之前的问题 (
在我的 UserControl 中有一个 DependencyObject
。我想将该对象绑定到我的 ViewModel
的 属性。在这种情况下,CarViewModel
、属性 名称是 Status
和 returns 枚举值。
public partial class CarView : UserControl
{
public CarStatus Status
{
get { return (CarStatus)GetValue(CarStatusProperty); }
set { SetValue(CarStatusProperty, value); }
}
public static readonly DependencyProperty CarStatusProperty =
DependencyProperty.Register("Status", typeof(CarStatus), typeof(CarView), new PropertyMetadata(OnStatusChanged));
private static void OnStatusChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
var control = (CarView)obj;
control.LoadThemeResources((CarStatus)e.NewValue == CarStatus.Sold);
}
public void LoadThemeResources(bool isSold)
{
// change some brushes
}
}
<UserControl x:Class="MySolution.Views.CarView"
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:views="clr-MySolution.Views"
mc:Ignorable="d"
views:CarView.Status="{Binding Status}">
<UserControl.Resources>
</UserControl.Resources>
<Grid>
<TextBlock Text="{Binding Brand}"FontSize="22" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
<UserControl
我需要在哪里指定这个绑定?在 UserControl 的根目录中,它给出了一个错误:
The attachable property 'Status' was not found in type 'CarView'
在我的 MainWindow 中,我使用 ContentControl
:
<ContentControl
Content="{Binding CurrentCar}">
<ContentControl.Resources>
<DataTemplate DataType="{x:Type viewmodel:CarViewModel}">
<views:CarView />
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
我的视图模型:
[ImplementPropertyChanged]
public class CarViewModel
{
public Car Car { get; private set; }
public CarStatus Status
{
get
{
if (_sold) return CarStatus.Sold;
return CarStatus.NotSold;
}
}
}
看来您的控件正在绑定到自身。
在 CarView 中查找状态。
您的控件 CodeBehind 中应该有一行代码,例如:
this.DataContext = new ViewModelObjectWithStatusPropertyToBindFrom();
此致
你的绑定写得不好。而不是写 views:CarView.Status="{Binding Status}"
你应该只写 Status="{Binding Status}"