XAML GridView ItemTemplate无法绑定到控件

我有一个带有ItemTemplate的GridView ,它包含一个Custom控件:

       

这是我的自定义用户控件:

            

它的代码背后:

 public sealed partial class HabitacionControl : UserControl { public HabitacionControl() { this.InitializeComponent(); } public MyClass Ubicacion { get { return (MyClass)GetValue(UbicacionProperty); } set { SetValue(UbicacionProperty, value); } } // Using a DependencyProperty as the backing store for Ubicacion. This enables animation, styling, binding, etc... public static readonly DependencyProperty UbicacionProperty = DependencyProperty.Register("Ubicacion", typeof(MyClass), typeof(HabitacionControl), new PropertyMetadata(new PropertyChangedCallback(OnUbicacionChanged))); private static void OnUbicacionChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { //... } } 

现在我需要将每个Ubicaciones.Ubicaciones绑定到我的Customcontrol的Ubicación属性。

在运行时,我的gridview生成我的所有项目,但绑定到它的Ubicacion属性永远不会发生。

输出窗口中没有任何警告。

我错过了什么? 还是做错了?

我的,请看这里:

    

有人卖给你一张肮脏,污秽的货物。 可能是其中一个跑来跑去告诉人们DataContext = this; 是个好主意。

对不起,切线。 现在看看这个:

  

我在看什么? 那是一个伪DataContext属性吗? 这是一个伪DataContext属性。 问题是BindingHabitacionControl的DataContext中的对象而不是其父对象起作用。 什么是HabitacionControl的DataContext?

    

这就是为什么你不为你的UserControl创建视图模型的原因。 您已经破坏了数据绑定的工作方式。 视图模型必须通过DataContext向下流动。 当您中断此流程时,您将失败。

我问你 – TextBox是否有TextBoxViewModel? 不。它具有绑定的Text属性。 你怎么绑它呢? 您的视图模型将流入TextBox.DataContext ,从而允许您将视图模型的属性绑定到TextBox上公开的属性。

还有其他hacky方法来解决这个问题,但最好的解决方案是首先不让自己陷入这种境地。

您需要抛弃HabitacionControlVM并在您的视图模型可以绑定的UserControl表面上公开DependencyProperties,提供您的UserControl需要的任何function。 将UI逻辑放在HabitacionControl的代码隐藏中。

不,这不会打破MVVM。 UI逻辑在代码隐藏中很好。

如果您的HabitacionControlVM正在执行非常不应该在代码隐藏中的繁重工作,那么只需将其重构为您的代码隐藏调用的类。

人们认为UserControlViewModel反模式是应该如何完成的。 它真的不是。 祝好运。