c# wpf data-binding user-controls dependencyobject

c# - wpf controls



Especifique la vinculación de DependencyProperty en UserControl en sí (2)

Siguiendo con mi pregunta anterior ( Cambiar pinceles basados ​​en la propiedad ViewModel )

En mi UserControl tengo un DependencyObject . Quiero vincular ese objeto a una propiedad de mi ViewModel . En este caso, un CarViewModel , nombre de propiedad es Status y devuelve un valor 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

¿Dónde debo especificar este enlace? En la raíz del UserControl, da un error:

La propiedad adjuntada ''Estado'' no se encontró en el tipo ''CarView''

En mi MainWindow, ato el CarView usando un ContentControl :

<ContentControl Content="{Binding CurrentCar}"> <ContentControl.Resources> <DataTemplate DataType="{x:Type viewmodel:CarViewModel}"> <views:CarView /> </DataTemplate> </ContentControl.Resources> </ContentControl>

Mi ViewModel:

[ImplementPropertyChanged] public class CarViewModel { public Car Car { get; private set; } public CarStatus Status { get { if (_sold) return CarStatus.Sold; return CarStatus.NotSold; } } }


Parece que su control es vinculante para sí mismo.
El estado se busca en CarView.

Debería tener una línea de código en su control CodeBehind como:

this.DataContext = new ViewModelObjectWithStatusPropertyToBindFrom();

Saludos


su encuadernación no está bien escrita. en lugar de escribir views:CarView.Status="{Binding Status}" debe escribir solo Status="{Binding Status}"