Как заставить WPF DataGrid использовать переменные-члены классов в DataGridTextColumn? - PullRequest
0 голосов
/ 06 марта 2012

Я пытаюсь связать DataGrid.ItemSource с ObservableCollection<SearchObject>. SearchObject - это пользовательский класс, который имеет несколько открытых переменных-членов (одна из них называется «параметры»). Parameters - это пользовательский класс, имеющий открытую переменную-член (типа string) с именем «query». Как получить строку «запрос» для отображения в сетке данных.

Я пытался Binding="{Binding ElementName=parameters, Path=query}" в DataGridTextColumn, но, похоже, это не сработало. Я предполагал, что это будет ссылаться на объект параметров и затем искать его переменную-член запроса, но это, похоже, не сработало.

Есть идеи? Вот мой XAML:

<DataGrid HorizontalAlignment="Stretch" Name="watchListDataGrid"
     VerticalAlignment="Stretch" IsReadOnly="True" 
     AlternatingRowBackground="#FFE4F0FC" 
     HorizontalScrollBarVisibility="Disabled" 
     SelectionChanged="watchListDataGrid_SelectionChanged"
     CanUserReorderColumns="False" 
     CanUserSortColumns="False"
     AutoGenerateColumns="False" KeyUp="watchListDataGrid_KeyUp">
<DataGrid.ContextMenu>
    <ContextMenu >
        <MenuItem Header="Remove" Click="MenuRemoveWatchListItem_Click"  />
    </ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Columns>
    <DataGridTextColumn Header="Query" Width="*" 
       Binding="{Binding ElementName=parameters, Path=query}" />
</DataGrid.Columns>

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Предполагая, что ItemsSrid вашей DataGrid связан с чем-то вроде:

<DataGrid ItemsSource={Binding Path=parameters}>

Привязка DataGridTextColumn должна быть:

<DataGridTextColumn Binding="{Binding Path=query}" />

Выиспользуйте ElementName для ссылки на другой элемент в вашем XAML.Например, если вы хотите привязать текст TextBlock к тексту TextBox:

<TextBox Name="myTextBox" />
<TextBlock Text={Binding Path=Text, ElementName=myTextBox} />
0 голосов
/ 08 марта 2012

Мне удалось решить проблему.Язан, ваше предложение использовать этот код ДЕЙСТВИТЕЛЬНО:

 <DataGridTextColumn Binding="{Binding Path=query}" />

Однако я пропустил {get;задавать;} для переменной-члена SearchObject «параметры».Когда я добавил их, все работало нормально:

public class SearchObject : ISerializable
{
    public SearchParameters parameters { get; set; }

Еще раз спасибо за вашу помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...