0

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

在我MainWindowCheckBox一个绑定到它的命令:checkCommand.

RootViewModel.cs中:

 public Command checkCommand { get; set; }


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

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

这个命令工作正常,它也改变了markedto的状态true(我已经用 a 测试过MessageShowBox)。

我之前已将 UC 添加到ObsevableCollection<UC>( ) 并在MainWindow.cs中以这种方式myThingsCollection将其绑定到ItemsControl

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

UC 显示正确。

marked是 的属性UCViewModel

class UCViewModel
    {
        #region Implementation of INotifyPropertyChanged


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

            }
        }
    }

UserControl( UC) 有一个CheckBox我以这种方式绑定的:

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

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

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

        InitializeComponent();

    }

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

4

2 回答 2

0

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

    IsChecked="{Binding path=marked, Mode=TwoWay}"
于 2013-06-06T09:40:25.443 回答
0

下载链接:这里

^^ 链接应该有一个项目,你所做的一切工作都很好。

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

  • 使用特定的样式指南命名您的变量。属性以“大写”开头。StyleCop可以帮助识别问题。是的风格指南非常重要:)
  • 使用 MVVM,你MyThingsCollection不应该是一个集合,UserControl但它们应该是他们的 VM 的集合
  • 不要在 View 的代码隐藏中创建 VM(除非您确定自己在做什么)。这不仅会重置您的 VM,而且还会经常创建视图,这可能是不可取的,尤其是在 MVVM 中。
  • 从 MVVM 开始时使用 MVVM 帮助程序库,即使您想自己做事。学习系统,然后自己动手,而不是马上走上漫长的道路。
  • 不要在 VM 中保留 View 相关元素。这打破了 MVVM。只是不要这样做。即使您认为没有其他选择,也有很多方法可以避免这样做。只搜索他们
于 2013-06-06T09:18:21.053 回答