我有UserControl
Person_UC
和Student_UC
。 ComboBox
中有一个Student_UC
,我想从Person_UC
禁用它。
但它不起作用。我想在没有MVVM的情况下实现这一目标。
public partial class Person_UC : UserControl
{
public Person_UC()
{
InitializeComponent();
Student_UC su = new Student_UC();
su.myComboBoxName.IsEnabled = false;
}
}
答案 0 :(得分:0)
没有MVVM,解决起来会很困难。您必须操纵当前使用的Student_UC的相同实例。
实际上,你正在实例化一个新的Student_UC并禁用它的ComboBox,但是你没有对你的变量“su”做任何事情。你把它分配到某个地方了吗?
基本上,每个UserControl应该有一个ViewModel,因此Person_UC的ViewModel和Student_UC的ViewModel。
警告,此解决方案要求您使用MVVM Light(https://mvvmlight.codeplex.com)等MVVM框架来发送消息。
一种标准方式是发送消息。将Person_UC的Loaded事件绑定到代码隐藏中的方法,如下所示:
<UserControl x:Class="YourAssembly.Person_UC"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="Person_UC"
Loaded="Loaded">
<Grid Name="RootGrid">
</Grid>
</UserControl>
并且:
public partial class Person_UC : UserControl
{
public Person_UC()
{
InitializeComponent();
}
private void Loaded(object sender, RoutedEventArgs e)
{
//Use a Message to notify your Student_UC's ViewModel that you would like to disable its ComboBox
Messenger.Default.Send<ChangeComboBoxEnabilityMessage>(new ChangeComboBoxEnabilityMessage(false));
}
}
然后,当您在Student_UC的ViewModel中收到消息时,您必须将此信息传递给视图。基本上,您可以将ComboBox的IsEnable属性绑定到其ViewModel中的属性,在收到消息时您将设置为false。
public class Student_UC_ViewModel : INotifyPropertyChanged
{
public Student_UC_ViewModel()
{
//Register your message
Messenger.Default.Register<ChangeComboBoxEnabilityMessage>(message => ComboBoxIsEnabled = message.ComboBoxIsEnabled);
}
private bool _comboBoxIsEnabled;
public bool ComboBoxIsEnabled
{
get
{
return _comboBoxIsEnabled;
}
set
{
_comboBoxIsEnabled = value;
OnPropertyChanged("ComboBoxIsEnabled");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
你的消息类:
public class ChangeComboBoxEnabilityMessage : MessageBase
{
public ChangeComboBoxEnabilityMessage(bool comboBoxEnabled)
{
ComboBoxIsEnabled = comboBoxEnabled;
}
public bool ComboBoxIsEnabled
{
get;
set;
}
}
我允许您将Student_UC xaml中ComboBox的IsEnable属性绑定到其ViewModel的属性(即ComboBoxIsEnabled)。 不要忘记确保设置了DataContext:
public partial class Student_UC : UserControl
{
public Person_UC()
{
InitializeComponent();
DataContext = new Student_UC_ViewModel();
}
...
}
另外,请注意绑定问题,在Visual Studio中查看输出控制台。