Xaml绑定问题

时间:2016-09-22 07:42:05

标签: xaml

我有一个问题,我真的很想分享我的代码,但我甚至不知道在哪里寻找。所以我会解释这个问题,也许你知道在哪里搜索......

我有一个包含列表框的视图,其中卡片作为项目模板,显示的信息很少。此卡绑定到其物品来源。对于所有卡,绑定工作除了第一个。如果单击卡片,则会显示详细信息。即使对于第一张卡,细节也是正确的(就像在db中写的那样)。现在,如果我切换到任何卡并切换回第一个 - 细节绑定也消失了。我绝对无能...... 谢谢你的帮助!

####编辑#### 很抱歉没有具体说明,但它对我来说没有意义......我会添加一些图像和(希望)相关的代码。

overview, origin of binding for details

在第一张卡片上,价值" 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>

因此默认情况下会选择第一张卡,这意味着此卡的详细信息会在视图初始化时显示。此卡的详细信息如下所示: enter image description here

这些细节中打印的值是正确的 - 只是在数据库中写入的内容。

我会在这里发布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" />

好的,所以值是正确的,但错误验证告诉我有值丢失...现在如果我切换卡并在切换回第一个之后,概览看起来仍然相同(所以这里没有变化) :

enter image description here

但现在细节如下: enter image description here

我真的不明白那里发生了什么......所有其他值(概述+细节)都是正确的。第四个图像甚至显示机器的名称,如果没有制造商,机器不能存在于数据库中 - 我猜想在现实生活中都没有:)

概述访问的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但我无法看到其中一个会如何导致这种行为...

    
  

再次感谢您的帮助:)

抱歉,截图不是那么好,但告诉我需要更改禁用的文字颜色 - 我希望你仍能看到差异

0 个答案:

没有答案