我希望每当菜单被选中时,用户控件就可见。
每当用户单击视觉菜单时,都会显示AV_Credentials用户控件。但是我无法为新的用户控件做数据上下文。
Menu.xaml
<UserControl x:Class="Connector.Views.Menu"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Connector.Views"
xmlns:menuViewModel="clr-namespace:Connector.ViewModel.Menu"
xmlns:ViewModel="clr-namespace:Connector.ViewModel.AV_Credentials"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="350">
<UserControl.DataContext>
<menuViewModel:Menu_ViewModel/>
</UserControl.DataContext>
<Grid>
<StackPanel>
<Menu HorizontalAlignment="Stretch" VerticalAlignment="Top" >
<MenuItem Header="Credentials">
<MenuItem Header="vision" Command="{Binding Vision}"/>
<MenuItem Header="NOP" Command="{Binding NOP}"/>
</MenuItem>
<MenuItem Header="Sync"/>
</Menu>
<local:AV_Credentials Visibility="{Binding Path=AVCred}" DataContext="{Binding AV_Context}"/>
</StackPanel>
</Grid>
Menu_ViewModel.cs
class Menu_ViewModel : INotifyPropertyChanged
{
private AV_Credentials_ViewModel _av_Context;
public AV_Credentials_ViewModel AV_Context
{
get
{
if(_av_Context == null)
{
_av_Context = new AV_Credentials_ViewModel();
}
return _av_Context;
}
}
private Visibility _cred = Visibility.Hidden;
public Visibility Cred
{
get
{
return _cred;
}
set
{
_cred = value; OnPropertyChanged("Cred");
}
}
private ICommand mUpdater;
public ICommand vision
{
get
{
if (mUpdater == null)
mUpdater = new Updater(this);
return mUpdater;
}
set
{
mUpdater = value;
}
}
private class Updater : ICommand
{
private Menu_ViewModel obj;
public Updater(Menu_ViewModel _obj)
{
obj = _obj;
}
#region ICommand Members
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
obj.ShowAVCred();
}
#endregion
}
public void ShowAVCred()
{
Cred = Visibility.Visible;
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
我想达到的目标是-
有什么问题
可见性部分工作正常,但是用户控件中的按钮和文本框不起作用。如果我分配datacontext,则按钮和文本框都可以使用,但是可见性不可用。
如果需要,我可以共享AV_Credential .xaml和.cs
对不起,英语不好
答案 0 :(得分:1)
如果我分配了datacontext,则按钮和文本框都可以使用,但是可见性不可用。
添加“ AV_Context”。到AV_Credentials.xaml
中的绑定路径,例如:
<TextText Text="{Binding AV_Context.YourProperty}" />
这应该起作用,因为DataContext
控件的AV_Credentials
是Menu_ViewModel
,并且此类型具有AV_Context
属性。
您不应显式设置DataContext
的{{1}},因为那样就无法绑定到UserControl
的{{1}}属性,因为您已经发现了。
另一种选择是为Menu_ViewModel
绑定指定一个明确的来源:
Cred