标签: selecteditemchanged

如何绑定到WPF TreeView的SelectedItem属性?

我在这里调整了TreeView Control示例项目,以便与Entity Framework对象一起使用.它运行得很漂亮,但是像许多其他人一样,尝试更新基于ParentViewModels的SelectedItem更改的集合或属性时,我也无法弥合理解的差距.

我在MVVM工作,希望我的代码隐藏免受任何混乱.作为一个初学者,我喜欢实现PropertyChanged通知的清洁,但由于它们没有固定的"SelectedItem"属性来绑定TreeView,我无法像往常一样提升我的PropertyChanged事件ListBox.

我的ChildViewModel上也有一个SelectedItem属性(实际上成功捕获了isSelected = true的对象)(参见HB对这个问题的回答).我也有我的ParentViewModel这势必我的看法(见@马丁Liversage的职位类型ChildViewModel的的SelectedItem 这里).我不能让他们同步.

请帮助我了解如何将SelectedItemChildViewModel 的属性传递给我的ParentViewModel.我没有将我的TreeView绑定到a CollectionView,所以我无法获取CurrentItem视图集合.

我正在处理的viewmodel集合非常查询,所以我现在还没有包含任何代码.请让我知道清楚需要什么.

treeview selecteditem mvvm inotifypropertychanged selecteditemchanged

3
推荐指数
1
解决办法
1万
查看次数

用户选择子项后,TreeView自动选择父级

在我的窗口中,我有一个TreeView和TextBox.假设TextBox用于编写自定义脚本,TreeView是一种选择要插入的函数的方法; 想想Crystal Report脚本编辑器.

我的目标是让用户单击TreeView的一个子项,并将该子项插入TextBox.子项是函数签名,位于父节点下.然后,用户可以导航到TextBox,选择一个功能参数并将其替换为另一个功能签名.为此,我处理TreeView的SelectedItemChanged事件,设置TextBox的SelectedText,然后尝试在文本更改后突出显示该文本.

正确地交换TextBox的SelectedText.但是,文本未突出显示,滚动条未滚动到所选文本.

这是我编写的测试项目中的XAML,用于重现行为:

  <Window x:Class="SelectedTextWeirdness.MainWindow"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:System="clr-namespace:System;assembly=mscorlib"
          xmlns:SelectedTextWeirdness="clr-namespace:SelectedTextWeirdness" Title="MainWindow" Width="600" Height="600"
          x:Name="Me">
     <Grid>
        <Grid.RowDefinitions>
           <RowDefinition Height="Auto" />
           <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <TreeView Grid.Row="0" x:Name="treeView" ItemsSource="{Binding ElementName=Me, Path=TreeViewItems, Mode=TwoWay}" 
                  SelectedItemChanged="treeView_SelectedItemChanged" Margin="10">
           <TreeView.Resources>
              <HierarchicalDataTemplate DataType="{x:Type SelectedTextWeirdness:Parent}" ItemsSource="{Binding Children}">
                 <TextBlock Text="{Binding Name}" />
              </HierarchicalDataTemplate>
              <DataTemplate DataType="{x:Type SelectedTextWeirdness:Child}">
                 <TextBlock Text="{Binding Name}" />
              </DataTemplate>
           </TreeView.Resources>
        </TreeView>
        <TextBox Grid.Row="1" x:Name="scriptTextBox" Margin="10" Height="200" Width="Auto" FontFamily="Consolas, Courier New" 
                 HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Auto"
                 MaxLines="9999" AcceptsReturn="True" AcceptsTab="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
                 Text="{Binding Path=Script, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                 />
     </Grid>
  </Window>
Run Code Online (Sandbox Code Playgroud)

这是代码隐藏:

  using …
Run Code Online (Sandbox Code Playgroud)

c# wpf treeview textbox selecteditemchanged

2
推荐指数
1
解决办法
3054
查看次数

c#,listbox,stackOverflow异常

我继承了KryptonToolkit ListBox控件来获取SelectedItemChanging事件.

public class CPListBox : KryptonListBox
{       
    public event CancelEventHandler SelectedIndexChanging;

    protected virtual void OnSelectedIndexChanging(CancelEventArgs e)
    {
        SelectedIndexChanging(this, e);
    }

    protected override void OnSelectedIndexChanged(EventArgs e)
    {           
        CancelEventArgs cArgs = new CancelEventArgs();
        OnSelectedIndexChanged(cArgs);

        if(!cArgs.Cancel)
        {
            base.OnSelectedIndexChanged(e);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在表单中,我使用代码处理事件:

    void UsersListBoxSelectedIndexChanging(object sender, CancelEventArgs e)
    {
        if(_presenter.CurrentUser.IsModified)
        {
            MessageBox.Show("Nie zapisales zmian!");
            e.Cancel = true;
        }

    }
Run Code Online (Sandbox Code Playgroud)

我得到stackOverflow;)例外.也许有人现在这个代码是什么wron?

c# listbox selecteditemchanged winforms

1
推荐指数
1
解决办法
415
查看次数