我是WPF的新手,我有一個問題,關注DataContext從MainWindow繼承到UserControl, ,它將作爲Tabpage附加到MainWindow的Tabcontrol。WPF DataContext從MainWindow繼承到UserControl
我的代碼片段如下:
UserControlModel.cs
public class UserControlModel : INotifyPropertyChanged
{
private string _name;
public string Name
{
get { return _name; }
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged("Name");
}
}
}
// Create the OnPropertyChanged method to raise the event
protected void OnPropertyChanged(string name)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
ViewModelLocator.cs
public class ViewModelLocator
{
private UserControlModel UserControlModel { get; set; }
public ObservableCollection<UserControlModel> Users { get; set; }
public ViewModelLocator()
{
Users = new ObservableCollection<UserControlModel>
{
new UserControlModel { Name = "Albert" },
new UserControlModel { Name = "Brian" }
};
}
}
MainWindow.xaml
<Window.Resources>
<local:ViewModelLocator x:Key="VMLocator" />
</Window.Resources>
<Grid HorizontalAlignment="Left" Height="330" VerticalAlignment="Top" Width="592">
<Grid HorizontalAlignment="Left" Height="45" Margin="0,330,-1,-45" VerticalAlignment="Top" Width="593">
<Button Content="Button" HorizontalAlignment="Left" Margin="490,5,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
</Grid>
<TabControl HorizontalAlignment="Left" Height="330" VerticalAlignment="Top" Width="592" >
<TabItem x:Name="UserControlTabItem" Header="User Control">
<Grid x:Name="UserControlTabpage" Background="#FFE5E5E5">
<local:UserControl VerticalAlignment="Top" DataContext="{Binding Users, Source={StaticResource VMLocator}}" />
</Grid>
</TabItem>
</TabControl>
</Grid>
我創建一個實例Ø f ViewModelLocator並將用戶實例綁定到MainWindow.xaml中的UserControl。
MainWindow.xaml.cs
public MainWindow()
{
InitializeComponent();
}
UserControl.xaml
<Grid>
<ListBox x:Name="lbUsers" DisplayMemberPath="???" HorizontalAlignment="Left" Height="250" Margin="30,27,0,0" VerticalAlignment="Top" Width="378"/>
</Grid>
UserControl.xaml.cs
private ObservableCollection<UserControlModel> _users;
public UserControl()
{
InitializeComponent();
_users = ??? How to reference the Users instance created in MainWindow ???
lbUsers.ItemsSource = _users;
}
其實,我想告訴UserControlModel的Name屬性列表框。如果我是正確的,UserControl實例是 ,用Users實例作爲MainWindow的DataContext繼承。如何在UserControl.xaml.cs的代碼隱藏 中引用Users實例?我已檢查UserControl構造函數中的DataContext爲null!怎麼來的?什麼是 正確的方式/地方在代碼隱藏測試DataContext? 另外,如何在UserControl.xaml中設置ListBox的DisplayMemberPath屬性。非常感謝。
您是否解決了以前的問題? https://stackoverflow.com/questions/44670303/wpf-bind-different-usercontrols-to-different-viewmodels。請記住接受答案:https:// meta。stackexchange.com/questions/23138/how-to-accept-the-answer-on-stack-overflow – mm8