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}"