2014-10-30 9 views
0

У меня есть вид в нем: listview с столбцами сетки, один из столбцов - текстовый. Мне нужно, чтобы некоторые могли связывать его с ViewModel. есть ли способ сделать это?WPF MVVM C# binding textbox

<ListView.View> 
    <GridView x:Name="activeContents" AllowsColumnReorder="False"> 
     <GridViewColumn Width="30" Header=" "> 
      <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <Image Source="{Binding IconFileFullPath}" Width="16" Height="16" ></Image> 
        </DataTemplate> 
      </GridViewColumn.CellTemplate> 
     </GridViewColumn> 
    <GridViewColumn Width="150" Header="Content" DisplayMemberBinding="{Binding name}"/> 
    <GridViewColumn Width="125" Header="Content Category" DisplayMemberBinding="{Binding contentCategory}"/> 
    <GridViewColumn Width="125" Header="Content Version" DisplayMemberBinding="{Binding version}"/> 
    <GridViewColumn Width="85" Header="Status" DisplayMemberBinding="{Binding status}"/> 
    <GridViewColumn Width="90" Header="Priority "> 
     <GridViewColumn.CellTemplate> 
       <DataTemplate> 
        <TextBox Text="{Binding seq, Mode=TwoWay}" Width="67" /> 
       </DataTemplate> 
     </GridViewColumn.CellTemplate> 
    </GridViewColumn> 
    </GridView> 
</ListView.View> 

попытался привязать, но никакого эффекта. что-то читал о работе с поведением, но не знаю, как это сделать. есть ли простой способ?

больше кода:

<!-- Active Contents--> 
          <ListView x:Name="ContentsList" SelectedItem="{Binding Path=contentToAction}" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" ItemsSource="{Binding Path = activeContents, Mode= TwoWay}" HorizontalAlignment="Stretch" Margin="0,6,0,0" VerticalAlignment="Top" Background="#FF454545" 
             SelectionMode="Single" Height="130" Width="650" ScrollViewer.CanContentScroll="True" 
             dd:DragDrop.IsDragSource="True" dd:DragDrop.IsDropTarget="True" dd:DragDrop.DropHandler="{Binding}" dd:DragDrop.UseDefaultDragAdorner="True"> 
           <ListView.Resources> 
            <ContextMenu x:Key="ItemContextMenu"> 
             <MenuItem Header="Open in CM" Command="{Binding DataContext.OpenContentVersionInCm, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}"/> 
             <MenuItem Header="Execute" Command="{Binding DataContext.ContentCopyCommand, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}"/> 
             <MenuItem Header="Update Execution Priority" Command="{Binding DataContext.UpdateExecutionPriorityCommand, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}"/> 
            </ContextMenu> 
            <Style TargetType="GridViewColumnHeader"> 
             <Setter Property="IsEnabled" Value="True"/> 
             <Setter Property="TextElement.Foreground" Value="Black"/> 
            </Style> 
           </ListView.Resources> 



           <ListView.View> 
            <GridView x:Name="activeContents" AllowsColumnReorder="False"> 

             <GridViewColumn Width="30" Header=" "> 
              <GridViewColumn.CellTemplate> 
               <DataTemplate> 
                <Image Source="{Binding IconFileFullPath}" Width="16" Height="16" ></Image> 
               </DataTemplate> 
              </GridViewColumn.CellTemplate> 
             </GridViewColumn> 
             <GridViewColumn Width="150" Header="Content" DisplayMemberBinding="{Binding name}"/> 
             <GridViewColumn Width="125" Header="Content Category" DisplayMemberBinding="{Binding contentCategory}"/> 
             <GridViewColumn Width="125" Header="Content Version" DisplayMemberBinding="{Binding version}"/> 
             <GridViewColumn Width="85" Header="Status" DisplayMemberBinding="{Binding status}"/> 
             <GridViewColumn Width="90" Header="Priority "> 
              <GridViewColumn.CellTemplate> 
               <DataTemplate> 
                <TextBox Text="{Binding seq, Mode=TwoWay}" Width="67" /> 
               </DataTemplate> 
              </GridViewColumn.CellTemplate> 
             </GridViewColumn> 
            </GridView> 
           </ListView.View> 

           <ListView.ItemContainerStyle> 
+0

Вы связываете ObservableColelction или любую коллекцию с вашим списком ListView? – JasonNew

+0

Да, его ObservableColelction – igor

+0

опубликуйте соответствующий код вида и привязки ваших источников. и проверьте окно вывода для привязки исключений. btw BradleyDotnet отправил правильный ответ;) – blindmeis

ответ

1

После того, как вы внутри GridViewColumn ваши DataContext изменения в связанном объекте.

Это значит, если у него есть свойство seq; ваша привязка будет работать правильно. Если вы хотите, чтобы свойство seq на самой модели просмотра, у вас есть два варианта. В любом случае, ваш путь будет выглядеть так:

"{Binding Path=DataContext.seq}" 

Первое имя вашего окна «корень» и выполнить команду ElementName связывания:

"{Binding Path=DataContext.seq, ElementName=root}" 

Другой заключается в использовании RelativeSource связывания:

"{Binding Path=DataContext.seq, RelativeSource={RelativeSource AncestorType={x:Type Window}}" 
+0

i изменил на , но без эффекта – igor

+0

@igor Получаете ли вы какие-либо ошибки System.Data в окне вывода? Они укажут на любые опечатки в вашей привязке. Также не забудьте указать корневой элемент, если вы используете 'ElementName'. – BradleyDotNET

+0

нет ошибок, , когда это нравится Я могу связать его с моделью. "{Binding Path = DataContext.seq}" как это не из модели, а не из viewModel – igor