Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UserControl和MainWindow之间的绑定问题_C#_Wpf_Binding_Command_Viewmodel - Fatal编程技术网

C# UserControl和MainWindow之间的绑定问题

C# UserControl和MainWindow之间的绑定问题,c#,wpf,binding,command,viewmodel,C#,Wpf,Binding,Command,Viewmodel,我在这个绑定中丢失了一些东西,因为它不工作。这是为了学习,如果你看到如何改进,请告诉我。但除此之外,我还想知道为什么这不起作用 在我的main窗口中有一个绑定了命令的复选框:checkCommand 在RootViewModel.cs中: public Command checkCommand { get; set; } public RootViewModel() { checkCommand = new Command(mark); } priva

我在这个绑定中丢失了一些东西,因为它不工作。这是为了学习,如果你看到如何改进,请告诉我。但除此之外,我还想知道为什么这不起作用

在我的
main窗口中
有一个绑定了命令的
复选框
checkCommand

RootViewModel.cs中:

 public Command checkCommand { get; set; }


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

private void mark()
        {          
            myThingsCollection[0].marked= true;               
        }
此命令工作正常,并且它还将标记的
状态更改为
true
(我已经用
消息显示框测试过了)

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

<ItemsControl ItemsSource="{Binding myThingsCollection}">
                        <DataTemplate> <!--I've ommited some parts here--!>
                           <local:UC/>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
UserControl
UC
)有一个我这样绑定的
复选框

 <CheckBox Content="Hello!" IsChecked="{Binding marked}"/>
但它不起作用。我不知道它少了什么。顺便问一下,我很确定这不是解决这个问题的好方法,有没有更简单的方法?谢谢下载链接:

^^林克应该有一个项目,你所做的一切都很好

如果您希望从代码中获得改进建议,请注意以下几点:

  • 使用特定的样式指南命名变量。属性以“大写”开头。可以帮助识别问题。是的,样式指南非常重要:)
  • 使用MVVM,您的
    MyThingsCollection
    不应该是
    UserControl
    的集合,而应该是其VM的集合
  • 不要在视图的代码隐藏中创建VM(除非您确定自己在做什么)。这不仅会重置您的虚拟机,而且每隔一段时间就会重置一次视图,这在MVVM中可能并不理想
  • 在开始使用MVVM时使用MVVM帮助程序库,即使您想自己做一些事情。学习系统,然后自己动手,而不是一开始就走漫长的路
  • 不要在VM中保留与视图相关的元素。这破坏了MVVM。不要这样做。有很多方法可以避免这样做,即使你认为没有其他选择。只要搜索他们

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

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

-.-[…]但它不起作用。[…]-非常有用,就像“我的应用程序正在崩溃”。来吧,你必须提供更多的细节。在VS中的调试输出窗口中是否有任何
BindingExpression
错误?顺便说一句,
Command
这是一个自定义类吗?是的,Command是一个启用这些命令的自定义类。我无法看到BindingExpression错误。我将再次检查。我已在“设置”、“输出”窗口中将数据绑定跟踪设置为“全部”。但我找不到错误显示的位置。它们是否显示在与正常错误相同的位置?如果是这样,则没有任何错误。不,如果您指的是显示编译错误的正常错误输出窗口,则没有任何错误。调试>Windows>输出我在这里写得不正确,实际上它是VM的集合。谢谢你的建议。当我在MVVM灯光下创建一个项目时,有一大堆我(认为)不需要的东西,这让我很不安。@Sturm如果你不需要什么东西,就把它扔掉。或者创建一个标准的WPF应用程序,并添加MVVMLight dll作为引用,然后在此基础上构建它。像
ViewModelBase
observegeobject
RelayCommand
SimpleIOC
这样的东西在启动IMO时非常值得使用,而无需修改“我(认为)不需要,这让我感到不安”-你不明白的东西(你自己说的)怎么会打扰你?它们应该是你想要立即查看的东西,看看它们做了什么,如果你认为它们毫无意义,你可以相应地重构它们。对任何你不懂的东西保持警惕并不能教会你很多东西。
        public UC()
    {
        UCViewModel context = new UCViewModel();
        DataContext = context;

        InitializeComponent();

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