我使用mvvm和存储库设计模式开发了一个wpf应用程序。通过绑定零代码,所有UI都可以完美地工作。
现在我必须使用标签将所有UI放在1个wpf UI上。在一些选项卡中,我放置了一些UI,这些UI是单独的UI,然后在由组框分隔的1个选项卡中。除组合框的单击事件外,所有绑定都按预期工作。我似乎无法获得正确的ViewModel来检测/设置组合框的SelectedItem属性。当执行到这行代码时: - SelectedScope = cboJobNo.SelectedItem作为Scope; SelectedItem为null。为什么呢?
此外,通过单击或选择1个组合框中的项目,如何将该选择发送到另一个ViewModel以显示其“'数据
提前谢谢
首先,我想要进行修正,来自外部组框的第一个ViewModel正在发送它的'数据到第二个ViewModel,它正确地位于第二个内部组框中,第二个ViewModel正在按预期处理数据。但输出不会显示在UI上。第二个ViewModel将显示其“#”的唯一方法。如果从内部组框中的组合框进行选择,则输出。我试图尽可能清楚地解释它 现在代码: - 第一个组框及其与第一个组合框的绑定: 我试图在这里复制并粘贴我的代码,但它的问题与其相关。缩进?
提前谢谢
以下是我的代码部分
<ComboBox
Name="cboJobNo"
Height="20"
Grid.Row="0"
Grid.Column="1"
IsEditable="{Binding booIsJobNoEditable}"
IsEnabled="{Binding booEnableDisableJobNo}"
ItemsSource="{Binding AllJobNos}"
SelectedItem="{Binding SelectedScope}"
SelectedIndex="{Binding intSetSelectedJobNoIndex}"
DisplayMemberPath="intJobNo"
SelectedValuePath="intJobNo"
Text="{Binding SelectedScope.intJobNo}"
VerticalAlignment="Center"
Margin="7,7,100.8,6.6"
>
<i:Interaction.Triggers>
<i:EventTrigger EventName="DropDownClosed">
<ei:CallMethodAction
TargetObject="{Binding}"
MethodName="ComboBoxSelection"
/>
</i:EventTrigger>
<i:EventTrigger EventName="KeyDown">
<ei:CallMethodAction
TargetObject="{Binding}"
MethodName="EnterTabKeyPressed"
/>
</i:EventTrigger>
<i:EventTrigger EventName="DropDownClosed">
<ei:CallMethodAction
TargetObject="{Binding ViewModel[5]}"
MethodName="JobNoSelection"
/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ComboBox>
public void ComboBoxSelection(object sender, EventArgs e)
{//Trap selections made on UI from comboboxes
ComboBox cboBox = (ComboBox)sender;
if (_booSearchForScopes == true)
{
_ScopeData.intTotalFound = 0; //reset total records found before new search
if (cboBox.Text != null && cboBox.Text != "")
{
SearchFor(cboBox.Name, cboBox.Text);
if (cboBox.Name == "cboJobNo" && FoundMultipleScopes.Count == 1)
{//Not working yet
_POrders.SelectedScope = SelectedScope;
_POrders.JobNoSelection(sender, e); //passing execution to the Purchase Orders ViewModel
FoundMultipleScopes = null;
}
}
}
}
public void JobNoSelection(object sender, EventArgs e)
{//Trap selections made on UI from from Job Number combobox
ComboBox cboBox = (ComboBox)sender;
if (cboBox.Text != null && cboBox.Text != "")
{
if (_POrdersData.CheckAssignment(int.Parse(cboBox.Text)) > 0) //check if job number is already assigned
{
JobNoAssigned();
}
else
{
SearchForJobNo(cboBox, cboBox.Text);
}
}
else
{
MessageBox.Show("Please select a Job Number from the list.", "Select Job Number", MessageBoxButton.OK,
MessageBoxImage.Information);
}
}