UserControl和MainWindow之间的绑定问题

时间:2013-06-06 08:54:25

标签: c# wpf binding command viewmodel

我在这个绑定中遗漏了一些东西,因为它不起作用。这是出于学习目的,如果您看到如何改进,请告诉我。但除此之外,我也有兴趣知道为什么这不起作用。

在我的MainWindow中,CheckBox有一个与之绑定的命令:checkCommand

RootViewModel.cs

 public Command checkCommand { get; set; }


 public RootViewModel()
        {
 checkCommand = new Command(mark);
        }

private void mark()
        {          
            myThingsCollection[0].marked= true;               
        }

此命令工作正常,它还将marked的状态更改为true(我已使用MessageShowBox对此进行了测试。)

我之前已将UC添加到ObsevableCollection<UC>myThingsCollection)并在 MainWindow.cs <中将其绑定到ItemsControl / p>

<ItemsControl ItemsSource="{Binding myThingsCollection}">
                        <DataTemplate> <!--I've ommited some parts here--!>
                           <local:UC/>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>

UC正确显示。

markedUCViewModel

的属性
class UCViewModel
    {
        #region Implementation of INotifyPropertyChanged


        private bool _marked;
        public bool marked
        {
            get
            {
                return _marked;
            }
            set
            {
                _marked= value;
                OnPropertyChanged("marked");

            }
        }
    }

UserControlUC)有CheckBox我以这种方式绑定:

 <CheckBox Content="Hello!" IsChecked="{Binding marked}"/>

以这种方式设置DataContext(在 UC.cs.xaml 后面的代码中)

        public UC()
    {
        UCViewModel context = new UCViewModel();
        DataContext = context;

        InitializeComponent();

    }

但它不起作用。我不知道它遗失了什么。顺便说一句,我很确定这不是解决这个问题的好方法,有没有更简单的方法?感谢

2 个答案:

答案 0 :(得分:0)

下载链接:Here

^^链接应该有一个项目,你正在做的一切工作正常。

如果您正在寻找改进代码的建议,请参考:

  • 使用特定样式指南命名变量。属性以“大写”开头。 StyleCop有助于发现问题。是风格指南非常重要:)
  • 使用MVVM,您的MyThingsCollection不应该是UserControl的集合,但它们应该是其VM的集合
  • 不要在View的代码隐藏中创建VM(除非您确定自己在做什么)。这不仅会重置您的VM,而且还会经常创建View,这可能是不可取的,尤其是在MVVM中。
  • 即使您想自己做事,也可以在启动MVVM时使用MVVM帮助程序库。学习系统,然后自己做,而不是马上走很长的路。
  • 不要在VM中保存View相关元素。这打破了MVVM。只是不要这样做。有很多的方法可以避免需要这样做,即使你认为只是一种替代品。只需搜索em

答案 1 :(得分:0)

如果您确定您的视图模型实现,请尝试更改绑定语法。

    IsChecked="{Binding path=marked, Mode=TwoWay}"