我有一个问题,我真的很想分享我的代码,但我甚至不知道在哪里寻找。所以我会解释这个问题,也许你知道在哪里搜索......
我有一个包含列表框的视图,其中卡片作为项目模板,显示的信息很少。此卡绑定到其物品来源。对于所有卡,绑定工作除了第一个。如果单击卡片,则会显示详细信息。即使对于第一张卡,细节也是正确的(就像在db中写的那样)。现在,如果我切换到任何卡并切换回第一个 - 细节绑定也消失了。我绝对无能...... 谢谢你的帮助!
####编辑#### 很抱歉没有具体说明,但它对我来说没有意义......我会添加一些图像和(希望)相关的代码。
在第一张卡片上,价值" Hersteller" (制造商)是我的后备价值...... 但正如您所看到的,只有第一张卡包含此回退值,所有其他卡都已正确设置。 ,xaml如下:
<ListBox x:Name="m_lbMaschinenUebersicht"
ItemsSource="{Binding AktuelleMaschinen}"
SelectedItem="{Binding SelectedMaschine}"
HorizontalContentAlignment="Stretch"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
SelectionChanged="m_lbMaschinenUebersicht_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<uc:UC_CardMaschine x:Name="m_ucCardMaschine" Margin="5"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
因此默认情况下会选择第一张卡,这意味着此卡的详细信息会在视图初始化时显示。此卡的详细信息如下所示:
这些细节中打印的值是正确的 - 只是在数据库中写入的内容。
我会在这里发布xaml,虽然我无法想象可能有某些事情导致这种行为(虽然XAML经常教我更好......)
<Grid Grid.Row="2" >
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="m_tbBezeichnung"
Margin="0 15 10 15" Grid.Row="2"
materialDesign:TextFieldAssist.Hint="Maschine"
materialDesign:TextFieldAssist.HintOpacity=".3"
VerticalAlignment="Bottom"
Text="{Binding Path=AktuelleMaschine.Bezeichnung,
ValidatesOnDataErrors=True,
UpdateSourceTrigger=PropertyChanged}"
Style="{DynamicResource MaterialDesignFloatingHintTextBox}"
IsEnabled="{Binding Editierbar}" />
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal" Grid.Column="1" Margin="0 0 0 20">
<ComboBox x:Name="m_cbBaujahr"
IsEnabled="{Binding Path=Editierbar}"
IsEnabledChanged="m_cbBaujahr_IsEnabledChanged"
Style="{DynamicResource MaterialDesignFloatingHintComboBox}"
materialDesign:TextFieldAssist.Hint="Baujahr"
HorizontalAlignment="Center" Margin="10 5"
DisplayMemberPath="BaujahrText"
ItemsSource="{Binding Path=AktuelleMaschine.WrapperListMaschineBaujahr}"
SelectedItem="{Binding AktuelleMaschineBaujahr}"
IsReadOnly="True" />
好的,所以值是正确的,但错误验证告诉我有值丢失...现在如果我切换卡并在切换回第一个之后,概览看起来仍然相同(所以这里没有变化) :
我真的不明白那里发生了什么......所有其他值(概述+细节)都是正确的。第四个图像甚至显示机器的名称,如果没有制造商,机器不能存在于数据库中 - 我猜想在现实生活中都没有:)
概述访问的viewmodel如下所示:
public UC_MaschinenVerwaltungUebersicht()
{
InitializeComponent();
DataContextChanged += UC_MaschinenVerwaltungUebersicht_DataContextChanged;
}
#endregion
private MVVM.ViewModel.VM_Maschinenverwaltung m_vmMaschinenverwaltung;
private void UC_MaschinenVerwaltungUebersicht_DataContextChanged(object sender, System.Windows.DependencyPropertyChangedEventArgs e)
{
if (DataContext != null)
{
m_vmMaschinenverwaltung = (MVVM.ViewModel.VM_Maschinenverwaltung)DataContext;
m_vmMaschinenverwaltung.OnWatcher += _vmMaschinenverwaltung_OnWatcher;
m_vmMaschinenverwaltung.PropertyChanged += VMMaschine_PropertyChanged;
m_vmMaschinenverwaltung.FuelleAktuelleMaschinen();
}
}
{
//ToDo dhdhdh Watcher
//if (m_vmMaschinenverwaltung.EditModus == Base.VM_Base.EditModusEnum.Ansicht)
//{
// FuelleListBoxMaschinen();
//}
//else
//{
// //Aktion merken und nach dem Update ggfs. ausführen
// if (!m_vmMaschinenverwaltung.WatcherList.Contains(enTabelle))
// m_vmMaschinenverwaltung.WatcherList.Add(enTabelle);
//}
}
private void VMMaschine_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
switch (e.PropertyName)
{
case GlobLib.PropertyNames.EditModus:
switch (m_vmMaschinenverwaltung.EditModus)
{
case Base.VM_Base.EditModusEnum.Neu:
case Base.VM_Base.EditModusEnum.Aendern:
case Base.VM_Base.EditModusEnum.Kopieren:
break;
default:
if (m_vmMaschinenverwaltung.WatcherList.Count > 0)
{
//ToDo dhdhdhdh Watcher
//FuelleListBoxMaschinen();
m_vmMaschinenverwaltung.WatcherList.Clear();
}
break;
}
break;
}
}
private void m_lbMaschinenUebersicht_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (m_vmMaschinenverwaltung.SelectedMaschine != null)
m_lbMaschinenUebersicht.ScrollIntoView(m_vmMaschinenverwaltung.SelectedMaschine);
}
你是对的,我正在使用第三方 - 一般来说它是流利的NHibernate和MaterialDesignInXamlToolkit但我无法看到其中一个会如何导致这种行为...
再次感谢您的帮助:)
抱歉,截图不是那么好,但告诉我需要更改禁用的文字颜色 - 我希望你仍能看到差异