【问题标题】:Window WPF Height is not bound to the model property窗口 WPF 高度未绑定到模型属性
【发布时间】:2014-06-19 00:18:30
【问题描述】:

更新:这个问题可能与Problems with binding to Window Height and Width有关

我正在尝试通过视图模型属性更改窗口高度。由于某种原因,它不起作用。

这是窗口类:

public partial class MyWindow
{
    public MyWindow()
    {
        InitializeComponent();

        DataContext = new MyWindowViewModel();

        // Does not work!
        // ((MainWindowViewModel) DataContext).Height = 50;

        // Works:
        //Height = 50;

MyWindow.xaml

<ctrls:MyBaseWindow x:Class="....MyWindow"
              ...
              Width="{Binding Width}"
              Height="{Binding Height}"
              d:DataContext="{d:DesignInstance viewModels:MyWindowViewModel}">

MyWindowViewModel.cs

public class MainWindowViewModel : ReactiveObject
{
    ...

    public int Height
    {
        get { return _height; }
        set { this.RaiseAndSetIfChanged(ref _height, value); }
    }

【问题讨论】:

  • 您的绑定是否适用于任何其他财产?
  • 是的,我将 ResizeMode 也绑定到了视图模型属性,它运行良好。

标签: c# wpf system.reactive


【解决方案1】:

我在我的 Visual Studio 中检查了它,当我的窗口的属性 SizeToContent 设置为“高度”时它没有工作。当我删除它时,一切正常。

你也应该改变行的顺序:

InitializeComponent();
DataContext = new MyWindowViewModel();

到:

DataContext = new MyWindowViewModel();
InitializeComponent();

【讨论】:

  • 您应该更改窗口类的构造函数中的指令顺序 - 这应该是解决方案。我已经编辑了我的帖子以显示这一点。
  • 实际上,订单的改变解决了原来的问题。但是看起来绑定被修改了,所以我不能通过修改模型属性来改变窗口大小。
  • 你的模型是否正确实现了 INotifyChanged?
  • 是的,它是完全反应式的(扩展了 ReactiveObject)。实际上,为宽度和高度指定双向数据绑定解决了这个问题。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
相关资源
最近更新 更多