在 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}"