【发布时间】:2015-09-08 02:44:48
【问题描述】:
我有一个 WPF MVVM 应用程序,但我遇到了这个问题... 我有一个列表视图,每列有几个文本框和 2 个组合框。 除了连击之外,一切都很好。 组合填充并包含值并仅显示所选值 第一个组合(在列表视图的第一行)。 我尝试了一个小测试,并用文本框切换了组合框,没有问题,所以我想这是组合特有的东西。 请帮我解决这个问题。
XAML:
<ListView DockPanel.Dock="Top" ItemsSource="{Binding NAPS_AgencyCodes}" SelectedItem="{Binding CurrentAgencyCode}" MaxHeight="650" Margin="10 0" HorizontalAlignment="Left" ScrollViewer.HorizontalScrollBarVisibility="Hidden" BorderThickness="1" behave:ListBoxBehavior.ScrollOnNewItem="true">
<ListView.View>
<GridView>
<GridViewColumn Header="Code" Width="80">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=Code, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True}" MaxLength="4" FontSize="12" Margin="0 5 0 0" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Description" Width="300">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=Description, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" FontSize="12" Margin="0 5 0 0" MaxLength="100" Width="285" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="State" Width="250">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding States}" DisplayMemberPath="StateName" SelectedValuePath="ID" SelectedValue="{Binding Path=StateCode, Mode=TwoWay, UpdateSourceTrigger = PropertyChanged}" Margin="0 5 0 0" Width="235"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Type Code" Width="250">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding AgencyTypeCodes}" DisplayMemberPath="Description" SelectedValuePath="Code" SelectedValue="{Binding Path=AgencyTypeCode, Mode=TwoWay, UpdateSourceTrigger = PropertyChanged}" Margin="0 5 0 0" Width="235"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
查看模型:
private NAPS_AgencyCode _agencyCode;
private NAPS_AgencyCodeValidator _validator;
public event Func<string> OnCodeChanged;
public ObservableCollection<AIR_StateViewModel> States { get; set; }
public ObservableCollection<NAPS_AgencyTypeCodeViewModel> AgencyTypeCodes { get; set; }
private int iCodeSerch;
#endregion
#region Ctor
public NAPS_AgencyCodeViewModel(NAPS_AgencyCode agencyCode)
{
_agencyCode = agencyCode;
_validator = new NAPS_AgencyCodeValidator(this);
}
#endregion
#region Properties
public string ID
{
get { return _agencyCode.ID; }
set { _agencyCode.ID = value; }
}
public string Code
{
get { return _agencyCode.Code; }
set
{
if (_agencyCode.Code == value)
return;
_agencyCode.Code = value;
SetStatus();
OnPropertyChanged("Code");
}
}
public string AgencyTypeCode
{
get { return _agencyCode.AgencyTypeCode; }
set
{
if(_agencyCode.AgencyTypeCode == value)
return;
_agencyCode.AgencyTypeCode = value;
SetStatus();
OnPropertyChanged("AgencyTypeCode");
}
}
public int StateCode
{
get { return _agencyCode.StateCode; }
set
{
if (value == _agencyCode.StateCode)
return;
_agencyCode.StateCode = value;
SetStatus();
OnPropertyChanged("StateCode");
}
}
public string Description
{
get { return _agencyCode.Description; }
set
{
if (value == _agencyCode.Description)
return;
_agencyCode.Description = value;
SetStatus();
OnPropertyChanged("Description");
}
}
public bool IsValid
{
get { return _agencyCode.IsValid; }
set
{
if (value == _agencyCode.IsValid)
return;
_agencyCode.IsValid = value;
OnPropertyChanged("IsValid");
}
}
我有一个主视图模型
NAPS_AgencyCodes = Repository.NAPS_AgencyCodeRepository.NAPS_AgencyCodes
.ToObservableCollection<NAPS_AgencyCodeViewModel>();
非常感谢!
【问题讨论】:
-
没有看到你的实际代码,我们只能假设事情。这听起来像是您将组合定义为静态资源,然后尝试多次重用该资源。但是 Visuals 只能有一个父级。介意与我们分享您的代码吗?
-
对不起,你说得对,我添加了一些代码。
-
Mmmmh... 我看不出您的代码有什么问题。您是否尝试过使用像 Snoop 这样的工具来检查正在渲染的内容?检查组合框是否确实存在,它们是否被某些东西覆盖,以及它们的可见性、宽度/高度等。
-
发布的代码是否有效。 “对不起,你是对的”是否意味着它是一个静态资源,现在它正在工作?如果是这样,请删除问题。
-
不,它不工作...加载时,所有组合都已填充,只有列表视图第一行的组合显示所选值。
标签: wpf listview mvvm combobox