gpt4 book ai didi

c# - 丢失数据上下文的附加集合项

转载 作者:行者123 更新时间:2023-11-30 18:45:15 27 4
gpt4 key购买 nike

我创建了一个附加属性 AttachedBehaviorsManager.Behaviors,它用作将事件与命令联系起来的 MVVM 帮助器类。该属性属于 BehaviorCollection 类型(ObservableCollection 的包装器)。我的问题是行为命令的绑定(bind)总是最终为空。不过,在按钮上使用时效果很好。

我的问题是为什么我丢失了集合内项目的 DataContext,我该如何解决?

<UserControl x:Class="SimpleMVVM.View.MyControlWithButtons"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:behaviors="clr-namespace:SimpleMVVM.Behaviors"
xmlns:con="clr-namespace:SimpleMVVM.Converters"
Height="300" Width="300">
<StackPanel>
<Button Height="20" Command="{Binding Path=SetTextCommand}" CommandParameter="A" Content="Button A" />
<Button Height="20" Command="{Binding Path=SetTextCommand}" CommandParameter="B" Content="Button B"/>
<TextBox x:Name="tb" Text="{Binding Path=LabelText}">
<behaviors:AttachedBehaviorsManager.Behaviors>
<behaviors:BehaviorCollection>
<behaviors:Behavior Command="{Binding Path=SetTextCommand}" CommandParameter="A" EventName="GotFocus"/>
</behaviors:BehaviorCollection>
</behaviors:AttachedBehaviorsManager.Behaviors>
</TextBox>
</StackPanel>

最佳答案

您绑定(bind)到命令,因为它使用的是 MVVM (Model-View-ViewModel) 模式。此用户控件的数据上下文是一个包含公开命令的属性的 ViewModel 对象。命令不需要是公共(public)静态对象。

显示代码中的按钮执行没有问题。它们绑定(bind)到 View 模型中的 SetTextCommand:

class MyControlViewModel : ViewModelBase
{
ICommand setTextCommand;
string labelText;

public ICommand SetTextCommand
{
get
{
if (setTextCommand == null)
setTextCommand = new RelayCommand(x => setText((string)x));
return setTextCommand;
}
}
//LabelText Property Code...

void setText(string text)
{
LabelText = "You clicked: " + text;
}
}

问题是在 behavior:Behavior 中无法识别绑定(bind)到在按钮中工作的相同 SetTextCommand。

关于c# - 丢失数据上下文的附加集合项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/803886/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com