Как исправить «двусторонняя переплета требует пути или XPath» исключения в DataGrids WPF?

StackOverflow https://stackoverflow.com/questions/9449689

Вопрос

<Сильный> Фон / контекст для этого вопроса: У меня есть настольное приложение WPF. Он использует LINQ для SQL для подключения к своей базе данных SQL, и отображает свои данные в DataGrids WPF. Он работал довольно хорошо, но производительность была проблемой, потому что LINQ может быть смертельно медленным, поэтому я переключаю свою логику и интерфейс управления вдали от контекста базы данных Linq, и вместо этого загружаю их в локальные переменные, которые очень похожи на объекты LINQ, которые массивно улучшают производительность.

<Сильная> проблема: Когда я проверяю свои датагруды, теперь я получаю новое исключение « двусторонняя связывание, требует пути или XPath.», Когда я пытаюсь редактировать значение в определенном виде (целое число ) столбец одной DataGrid, хотя редактирование строковых колонн работал нормально. Я не понимаю, почему я получаю это, или что делать с этим.

Так что он работал, когда dataGrid.dataContext был установлен на ассоциацию объекта LINQ, но она почти работает, когда он установлен в список простого объекта. Я попытался изменять список на обменную обработку, но это не имело видимого эффекта.

Я посмотрел около десятка других связанных вопросов здесь и на других сайтах, и не вижу ничего, что, кажется, помогает.

В настоящее время у меня есть:

<DataGrid Margin="12,110,12,0" x:Name="dgDays" ItemsSource="{Binding}" 
                 Height="165" VerticalAlignment="Top" MinHeight="0" 
                 AutoGenerateColumns="False"
                 SelectionChanged="dgDays_SelectionChanged">
.

...

<DataGrid.Columns>
            <DataGridComboBoxColumn Width="80" Header="Cook" x:Name="_DailyCookCombo" SelectedItemBinding="{Binding sCook}"/>
            <DataGridComboBoxColumn Width="80" Header="Eat" x:Name="_DailyDayCombo" SelectedItemBinding="{Binding sDay}"/>
            <DataGridTextColumn Width="52" Header="Prot" Binding="{Binding Protein}" />
            <DataGridTextColumn Width="52" Header="Carb" Binding="{Binding Carb}" />
            <DataGridTextColumn Width="52" Header="Fat" Binding="{Binding Fat}" />
            <DataGridTextColumn Width="62" Header="Prot %" Binding="{Binding ProteinPercent}" />
            <DataGridTextColumn Width="62" Header="Carb %" Binding="{Binding CarbPercent}" />
            <DataGridTextColumn Width="62" Header="Fat %" Binding="{Binding FatPercent}" />
            <DataGridTextColumn Width="116" Header="non PFW meals" Binding="{Binding NonPFWMeals}" />
            <DataGridTextColumn Width="55" Header="Prot" Binding="{Binding CalcProt}" IsReadOnly="True" />
            <DataGridTextColumn Width="55" Header="Carb" Binding="{Binding CalcCarbs}" IsReadOnly="True" />
            <DataGridTextColumn Width="55" Header="Fat" Binding="{Binding CalcFat}" IsReadOnly="True" />
            <DataGridTextColumn Width="65" Header="KCal" Binding="{Binding CalcKCal}" IsReadOnly="True" />
            <DataGridCheckBoxColumn Width="32" Header="Skip" Binding="{Binding Skip}"  />
            <DataGridTextColumn Width="70" Header="Date" Binding="{Binding sNextDate}" IsReadOnly="True" />
        </DataGrid.Columns>
    </DataGrid>
.

Что связано кодом:

dgDays.DataContext = TheMember.RAM_Member_Requirements_Days;
.

который определяется как:

public ObservableCollection<RAM_Member_Requirements_Day> RAM_Member_Requirements_Days = new ObservableCollection<RAM_Member_Requirements_Day>();
.

, чьи связанные члены:

    public class RAM_Member_Requirements_Day : INotifyPropertyChanged
{
    // RAM equivalents of DB values:
public System.Nullable<decimal> Protein;
public System.Nullable<decimal> Carb;
public System.Nullable<decimal> Fat;
public System.Nullable<decimal> ProteinPercent;
public System.Nullable<decimal> CarbPercent;
public System.Nullable<decimal> FatPercent;
public System.Nullable<int> NonPFWMeals;
public System.Nullable<bool> Skip;
public System.Nullable<System.DateTime> SkipDate;
.

Я нашел очень простое фиксирование вскоре после набора этого, которая я буду публиковать, когда сайт позволяет мне после его 8-часовой задержки.

Это было полезно?

Решение 3

Хорошо, хорошо, набрав все это, я попробовал что-то, которое работало.В любом случае я размещаю, если это поможет другим.

Раствор должен был добавить к переменным элемента задачи, которые связаны:

{get;набор;}

как в:

    public System.Nullable<decimal> Protein { get; set; }
    public System.Nullable<decimal> Carb { get; set; }
    public System.Nullable<decimal> Fat { get; set; }
    public System.Nullable<decimal> ProteinPercent { get; set; }
    public System.Nullable<decimal> CarbPercent { get; set; }
    public System.Nullable<decimal> FatPercent { get; set; }
    public System.Nullable<int> NonPFWMeals { get; set; }
    public System.Nullable<bool> Skip { get; set; }
.

Другие советы

Я столкнулся с этой проблемой с связанным текстовым ящиком.Мое решение было явно связываться с «».:

<TextBox Text="{Binding Path=.}" />
.

Это сделала трюк.

"Двусторонняя связывание требует пути или xpath", может быть причиной, может вызвать небольшую разницу в названии пути в XAML VS The One в привязке C #.Письмо столиц действительно важно!Это была моя проблема.

Xaml:

<DataGridTextColumn Binding="{Binding Path=TotalHeure}"   ClipboardContentBinding="{x:Null}" Header="Total Heures" Width="80"/>
.

C #:

public string Totalheure { get; set; }
.

Это приведет к двустороннему привязку, требующим ошибки PATH или XPATH, потому что они не совсем одинаковы, и программы не могут найти путь к привязке!

Может быть, это поможет кому-то еще, кто сделал ту же ошибку

Один иногда может сделать странную маленькую вещь, когда устаешь в конце дня. У меня есть связывание DataGrid для объекта структуры сущности, называемой зависимыми - полями на имя_OF_DEPENDANT / Отношения / date_of_birth. Каким-то образом я приложил создать новые свойства: полномочия / отношения / на свидание - все правильные типы.
Так что в моей DataGrid я связываюсь с

ObservableCollection<Dependant> 
.

Но мои столбцы должны связываться с столбцами в моей таблице таблицы сущности. Так что это правильно:

Binding="{Binding Name_of_Dependant}"
.

Это было неправильно:

Binding="{Binding FullNames}"
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top