C# 在C中设置TabControl的DisplayMemberPath#
我用C代码创建了一个TabControl。我将其ItemsSource绑定到集合并设置边距。 由于某些原因,设置其DisplayMemberPath无效C# 在C中设置TabControl的DisplayMemberPath#,c#,wpf,binding,tabcontrol,C#,Wpf,Binding,Tabcontrol,我用C代码创建了一个TabControl。我将其ItemsSource绑定到集合并设置边距。 由于某些原因,设置其DisplayMemberPath无效 _tabControl = new TabControl(); _tabControl.Margin = new Thickness(5); _tabControl.DisplayMemberPath = "Header"; _tabControl.SetBinding(ItemsControl.ItemsSourceProperty, ite
_tabControl = new TabControl();
_tabControl.Margin = new Thickness(5);
_tabControl.DisplayMemberPath = "Header";
_tabControl.SetBinding(ItemsControl.ItemsSourceProperty, itemsSourceBinding);
集合中的每个项都有一个名为“Header”的属性
为什么这不起作用
安德烈
编辑:
以下是所有相关代码:
public partial class VariationGroupPreviewOptionsView
{
public string Header { get; set; }
public VariationGroupPreviewOptionsView()
{
InitializeComponent();
DataContext = new VariationGroupPreviewOptionsViewModel();
}
}
private void OptionsCommandExecute()
{
var dlg = new OptionsDialog();
dlg.ItemsSource = new List<ContentControl>() {new VariationGroupPreviewOptionsView(){Header = "Test"}};
dlg.ShowDialog();
}
public class OptionsDialog : Dialog
{
public static readonly DependencyProperty ItemsSourceProperty =
DependencyProperty.Register("ItemsSource", typeof (IEnumerable), typeof (OptionsDialog), new PropertyMetadata(default(IEnumerable)));
public IEnumerable ItemsSource
{
get { return (IEnumerable) GetValue(ItemsSourceProperty); }
set { SetValue(ItemsSourceProperty, value); }
}
private readonly TabControl _tabControl;
public OptionsDialog()
{
DataContext = this;
var itemsSourceBinding = new Binding();
itemsSourceBinding.Path = new PropertyPath("ItemsSource");
_tabControl = new TabControl();
_tabControl.Margin = new Thickness(5);
_tabControl.DisplayMemberPath = "Header";
_tabControl.SetBinding(ItemsControl.ItemsSourceProperty, itemsSourceBinding);
var recRectangle = new Rectangle();
recRectangle.Margin = new Thickness(5);
recRectangle.Effect = (Effect)FindResource("MainDropShadowEffect");
recRectangle.Fill = (Brush)FindResource("PanelBackgroundBrush");
var grdGrid = new Grid();
grdGrid.Children.Add(recRectangle);
grdGrid.Children.Add(_tabControl);
DialogContent = grdGrid;
}
}
public分部类变量GroupPreviewOptions视图
{
公共字符串头{get;set;}
公共变量组预览选项视图()
{
初始化组件();
DataContext=新变量GroupPreviewOptionsViewModel();
}
}
私有无效选项CommandExecute()
{
var dlg=新选项对话框();
dlg.ItemsSource=new List(){new VariationGroupPreviewOptionsView(){Header=“Test”};
dlg.ShowDialog();
}
公共类选项对话框:对话框
{
公共静态只读依赖项Property ItemsSourceProperty=
DependencyProperty.Register(“ItemsSource”、typeof(IEnumerable)、typeof(Options对话框)、new PropertyMetadata(default(IEnumerable));
公共IEnumerable ItemsSource
{
get{return(IEnumerable)GetValue(ItemsSourceProperty);}
set{SetValue(ItemsSourceProperty,value);}
}
私有只读TabControl\u TabControl;
公共选项对话框()
{
DataContext=this;
var itemsSourceBinding=新绑定();
itemsSourceBinding.Path=新属性路径(“ItemsSource”);
_tabControl=新的tabControl();
_tabControl.Margin=新厚度(5);
_tabControl.DisplayMemberPath=“Header”;
_tabControl.SetBinding(ItemsControl.ItemsSourceProperty,itemsSourceBinding);
var recRectangle=新矩形();
再收缩角。边缘=新厚度(5);
recRectangle.Effect=(Effect)FindResource(“MainDropShadowEffect”);
recRectangle.Fill=(画笔)FindResource(“PanelBackgroundBrush”);
var grdGrid=new Grid();
grdGrid.Children.Add(ReclectAngle);
grdGrid.Children.Add(_-tabControl);
DialogContent=grdGrid;
}
}
如果您清理并简化代码,您将看到设置DisplayMemberPath
的效果与您希望的完全一样:
XAML:
代码:
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
this.DataContext=新列表
{
新tabitem模型
{
Header=“第一个”
},
新tabitem模型
{
Header=“第二个”
},
};
}
}
公共类tabitem模型
{
公共字符串头
{
得到;
设置
}
}
结果:
所以,问题不在于
TabControl.DisplayMemberPath
不起作用,而是在代码的其他地方。简化,直到找到位置。如果清理并简化代码,您将看到设置DisplayMemberPath
完全按照您的要求工作:
XAML:
代码:
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
this.DataContext=新列表
{
新tabitem模型
{
Header=“第一个”
},
新tabitem模型
{
Header=“第二个”
},
};
}
}
公共类tabitem模型
{
公共字符串头
{
得到;
设置
}
}
结果:
所以,问题不在于
TabControl.DisplayMemberPath
不起作用,而是在代码的其他地方。简化,直到找到位置。请描述“不工作”。选项卡项标题为空。要删除边距,不会更改任何内容。您在哪里设置选项卡控件的itemsource?我在第一篇文章中添加了所有相关代码。请描述“不工作”。TabItem标题为空。若要删除边距,则不会更改任何内容。您将_tabControl的itemsource设置在何处?我在第一篇文章中添加了所有相关代码。我做了一些测试,发现如果您的项继承自“Control”,则会出现这些问题。我做了一些测试,发现如果您的项继承自“控件”。
<TabControl ItemsSource="{Binding}" DisplayMemberPath="Header"/>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new List<TabItemModel>
{
new TabItemModel
{
Header = "First"
},
new TabItemModel
{
Header = "Second"
},
};
}
}
public class TabItemModel
{
public string Header
{
get;
set;
}
}