【发布时间】:2013-03-10 11:37:12
【问题描述】:
我有一个带有 tabcontrol 的页面。
我正在控件中绑定一个 tabitem 的位置列表。
记录在列表视图中列出。
我可以通过将输入控件绑定到 listview.selecteditem 来编辑记录。
我的问题是当我想添加新记录时。我想尽量减少后面的代码。
视图模型:
private ObservableCollection<LocationViewModel> _locations;
public ObservableCollection<LocationViewModel> Locations
{
get { return _locations; }
}
public LocationListViewModel()
{
_locations = new ObservableCollection<LocationViewModel>();
foreach (Service.Location l in service.GetLocationList().OrderBy(l => l.Building).ThenBy(l => l.Floor))
{
_locations.Add(new LocationViewModel
{
id = l.id,
Building = l.Building,
Floor = l.Floor,
RoomNo = l.RoomNo,
MapTitle = l.MapTitle,
MapExtension = l.MapExtension,
Map = l.Map,
DateCreated = l.DateCreated,
CreatedByID = l.CreatedByID,
CreatedByDesc = l.CreatedByDesc,
DateEdited = l.DateEdited,
EditedByID = l.EditedByID,
EditedByDesc = l.EditedByDesc
}
);
}
}
XML:
<TabItem x:Name="tabSettingsLocations" x:Uid="tabSettingsLocations"
Header="Locations"
DataContext="{StaticResource ResourceKey=LocationList}"> .....
成功绑定到列表视图以进行编辑的示例
<TextBox x:Name="txtSettingLocationBuildingEdit"
Margin="90,17,0,0" Style="{DynamicResource SettingsTextBoxStyle}"
Text="{Binding SelectedItem.Building, ElementName=lvwSettingsLocations,
Mode=TwoWay}" />
新记录绑定失败示例(使用不同的输入控件集)
<TextBox x:Name="txtSettingLocationBuildingAdd"
Margin="90,17,0,0" Style="{DynamicResource SettingsTextBoxStyle}"
Text="{Binding Building, ElementName=lvwSettingsLocations,
Mode=OneWayToSource}"/>
我也尝试将子标签项绑定到同一个数据源
<TabItem x:Name="tbSettingsLocationsAdd" x:Uid="tbSettingsLocationsAdd"
Header="Add New"
DataContext="{StaticResource ResourceKey=LocationList}">
<TextBox x:Name="txtSettingLocationBuildingAdd"
Margin="90,17,0,0" Style="{DynamicResource SettingsTextBoxStyle}"
Text="{Binding Building}"/>
无济于事。
我也尝试创建一个新的子数据视图,但我希望将它们全部绑定在一起,以便界面更新我添加或编辑的任何内容。
有人帮忙吗?
【问题讨论】:
-
你设置了dataContext了吗?
-
目前还不清楚问题出在哪里,您正在谈论成功和不成功的绑定,但您声明要最小化“添加”方法的代码隐藏。至少您不应该这样做
Text="{Binding SelectedItem.Building, ElementName=lvwSettingsLocations, Mode=TwoWay}",而是将以下内容添加到TextBox。DataContext="{Binding SelectedItem, ElementName=lvwSettingsLocations}" Text="{Binding Path=Building}"Binding 在属性上效果很好,而不是在“子属性”上,至少对于这种方式的属性属性来说效果很差。 -
我听取了您的建议并重新构建了绑定。然而,它并不能解决新的进入问题。问题是新的位置视图模型不存在。看来我需要使用 observablecollection.add 在后面的代码中添加。
标签: wpf data-binding observablecollection