我有一个用户控件列表。我想在我的视图中一次只显示一个。为了实现这一点,我使用ComboBox来显示用户控件列表。并根据所选的ComboBox项显示它们。我创建了一个自定义界面ICustomInterface,它具有我想要显示给用户的Title属性。我在用户界面上实现了这一点。
但问题是,当我运行我的应用程序时,我没有看到标题文本,而是看到UserControl本身。
您可以在此处看到整个用户控件存在于组合框中。我需要做的是显示文字。
这是XAML代码。
<ComboBox Grid.Column="1" ItemsSource="{Binding Modules}" SelectedItem="{Binding SelectedModule}" DisplayMemberPath="{Binding Title}"/>
这是视图模型。
public List<ICustomInterface> Modules
{
get
{
return _modules; // Assume that there are some items present in this.
}
}
这是我的用户控件,我试图显示它的集合。
public partial class LauncherView : UserControl, ICustomInterface
{
public string Title { get { return "Launcher"; } }
// User control stuff.
}
答案 0 :(得分:1)
要回答您的问题,您的LauncherView
课程与ICustomInterface
集合之间似乎没有关联。 @Farzi正确评论说,如果您希望能够从Title
对象访问ICustomInterface
接口,则应在ICustomInterface
接口中声明该属性。
要解决此问题,请将Title
属性添加到ICustomInterface
界面,或将Modules
集合的类型更改为实现Title
属性的任何类型。
关于您的设置的个人想法:
就我个人而言,我认为在UserControl
中收集ComboBox.ItemsSource
个对象并不是一个好主意。您将消耗所有所需的所有资源,即使只显示了一个
您可以使用代表每个string
标题的UserControl
集合,然后绑定到ComboBox.SelectedItem
属性,而不是这样做。然后,您可以只拥有一个ICustomInterface
类型的属性,您可以在SelectedItem
属性发生更改时进行更新。
在WPF中,我们通常使用数据而不是UI控件。因此,更好的选择是操纵每个视图的视图模型,并在ContentControl
中显示视图模型,首先设置一些DataTemplates
:
<Application.Resources>
<DataTemplate DataType="{x:Type ViewModels:YourViewModel}">
<Views:YourView />
</DataTemplate>
</Application.Resources>
在主视图中:
<ContentControl Content="{Binding ViewModel}" />
在主视图模型或代码背后:
public ICustomInterface ViewModel
{
get { return viewModel; }
set { viewModel= value; NotifyPropertyChanged("ViewModel"); }
}
public string SelectedTitle
{
get { return selectedTitle; }
set
{
selectedTitle = value;
NotifyPropertyChanged("SelectedTitle");
if (SelectedTitle == "Something") ViewModel = new SomethingViewModel();
if (SelectedTitle == "Other") ViewModel = new OtherViewModel();
}
}
或者你可以拥有一组视图模型(浪费资源):
public string SelectedTitle
{
get { return selectedTitle; }
set
{
selectedTitle = value;
NotifyPropertyChanged("SelectedTitle");
ViewModel = ViewModelCollection.Where(v => v.Title == SelectedTitle);
}
}
我明白你没有要求我的任何个人想法,我希望他们以某种方式帮助过你。如果他们不受欢迎,请道歉。