我是WPF的新手请帮帮我任何一个。我有两个viewmodels 1.ItemCategoryViewModel和2.TypeViewmodel这两个视图模型来两个不同的表
<tabcontrol>
<TabItem x:Name="itemtype" Header="ItemType" IsSelected="True" MinHeight="10">
<Grid/>
</tabitem>
<TabItem Header="ItemCategory" Margin="-1,0" MinHeight="10">
<grid/>
</tabitem>
</tabcontrol>
在xaml.cs代码中,我想使用两个viewmodels。
TypeViewmodel povm = new TypeViewmodel();
ItemCategoryViewModel tcvm=new ItemCategoryViewModel();
public PurchaseOrderEntry()
{
InitializeComponent();
this.DataContext = povm;
this.DataContext = tcvm;
txtPONumber.Focus();
if (povm.FocusMoveTo == null)
povm.FocusMoveTo = new Action(() => this.FieldNumberToChange());
if (povm.FocusMoveByTabId == null)
povm.FocusMoveByTabId = new Action(() =>this.GoToFocusByTabId());
if (povm.OpenDialogue == null)
povm.OpenDialogue = new Action<string>(this.OpenDialogue);
if (tcvm.FocusMoveTo == null)
tcvm.FocusMoveTo = new Action(() => this.FieldNumberToChange());
if (tcvm.FocusMoveByTabId == null)
tcvm.FocusMoveByTabId = new Action(() =>this.GoToFocusByTabId());
if (tcvm.OpenDialogue == null)
tcvm.OpenDialogue = new Action<string>(this.OpenDialogue);
}
当我只执行一个标签项时,另一个标签项不起作用.viewmodel重写。我该如何解决请帮助我
答案 0 :(得分:0)
如何将两个视图模型包装在“MainViewModel”中并在xaml代码中调整绑定?
据我所知,您可以在一个视图中使用不同的视图模型用于不同的控件,但我不会根据所选的选项卡更改tabcontrol的完整视图模型:
编辑:
public partial class MainWindow : Window
{
public MainViewModel MainViewModel { get; set; }
public MainWindow()
{
MainViewModel = new MainViewModel(new TypeViewmodel(), new ItemCategoryViewModel());
this.DataContext = MainViewModel;
InitializeComponent();
}
}
public class MainViewModel
{
public TypeViewmodel TypeViewmodel { get; set; }
public ItemCategoryViewModel ItemCategoryViewmodel { get; set; }
public MainViewModel(TypeViewmodel povm, ItemCategoryViewModel tcvm)
{
this.TypeViewmodel = povm;
this.ItemCategoryViewmodel = tcvm;
}
}
public class ItemCategoryViewModel
{
public ItemCategoryViewModel()
{
TextBoxMessageItemCategoryViewModel = "Test - ItemCategoryViewModel";
}
public String TextBoxMessageItemCategoryViewModel { get; set; }
}
public class TypeViewmodel
{
public TypeViewmodel()
{
TextBoxMessageTypeViewmodel = "Test - TypeViewmodel";
}
public String TextBoxMessageTypeViewmodel { get; set; }
}
的Xaml:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TabControl>
<TabItem x:Name="itemtype" Header="ItemType" IsSelected="True" MinHeight="10">
<Grid DataContext="{Binding TypeViewmodel}">
<Label Content="{Binding TextBoxMessageTypeViewmodel}"></Label>
</Grid>
</TabItem>
<TabItem Header="ItemCategory" Margin="-1,0" MinHeight="10" >
<Grid DataContext="{Binding ItemCategoryViewmodel}">
<Label Content="{Binding TextBoxMessageItemCategoryViewModel}"></Label>
</Grid>
</TabItem>
</TabControl>
</Grid>
说明: 我创建了两个真正的小视图模型,因此您了解了什么是绑定。 两个内部视图模型都有一个字符串属性,它将在您的选项卡中绑定。 您可以将其替换为您要绑定的任何内容。
在Xaml中,您可以看到TabControl中的每个Grid都绑定到MainViewModel的一个属性,该属性已经是整个View的DataContext(在我的例子中是Window)。 (您可以在TabControl本身中进行绑定)
<Grid DataContext="{Binding TypeViewmodel}">
所以在这一点上,你的DataContext是TypeViewmodel(对于网格内的所有元素!),所以你可以将标签内容绑定到TypeViewModel类的属性:
<Label Content="{Binding TextBoxMessageTypeViewmodel}"></Label>
这是真正的基本绑定 - 您应该在任何教程中找到它...以及...
希望这会对你有所帮助。
答案 1 :(得分:0)
替换此代码
this.DataContext = povm;
this.DataContext = tcvm;
使用此代码
this.itemtype.DataContext = povm;
this.ItemCategory.DataContext = tcvm;