在UserControl中指定DependencyProperty的绑定



跟进我之前的问题(根据ViewModel属性更改画笔)

在我的UserControl我有一个DependencyObject。我想把这个对象绑定到ViewModel的一个属性上。本例中为CarViewModel,属性名称为Status,返回enum值。

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的根目录下,它给出了一个错误:

在类型'CarView'中找不到可附加属性'Status'

在我的主窗口中,我使用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;
        }
    }
}

您的绑定没有写好。而不是写views:CarView.Status="{Binding Status}",你应该只写Status="{Binding Status}"

似乎你的控件绑定到自己。
在CarView中查找状态。

你应该在你的控件CodeBehind中有一行代码,如:

this.DataContext = new ViewModelObjectWithStatusPropertyToBindFrom();

相关内容

  • 没有找到相关文章

最新更新