MVVM树视图所选项目

MVVM树视图所选项目,mvvm,binding,treeview,selecteditem,Mvvm,Binding,Treeview,Selecteditem,我希望有人愿意在这里帮助我。 我是MVVM的新手,在阅读了manny post和示例之后,我仍然无法理解这一点 我有一个EF数据库,里面有属于每个项目的项目和计算。 我正在使用treeview和HierarchycalDataTemplate显示项目和计算。 单击treeview项目时,我希望将标签的文本绑定到要设置的位置 public string totaalPrijs 但我就是不知道怎么做 这就是我的CalculationViewModel的外观 namespace Treeview_t

我希望有人愿意在这里帮助我。 我是MVVM的新手,在阅读了manny post和示例之后,我仍然无法理解这一点

我有一个EF数据库,里面有属于每个项目的项目和计算。 我正在使用treeview和HierarchycalDataTemplate显示项目和计算。 单击treeview项目时,我希望将标签的文本绑定到要设置的位置

public string totaalPrijs
但我就是不知道怎么做

这就是我的CalculationViewModel的外观

namespace Treeview_test1.ViewModel
{
public class CalculationViewModel : ViewModelBase
{
    public CalculationViewModel(TableItemChildren child)
    {
        this.Child = child;
        IsChecked = false;
    }

    public TableItemChildren Child { get; protected set; }

    public string totaalPrijs
    {
        get { return Child.dbTotaalPrijs; }
        set
        {
            if (Child.dbTotaalPrijs != value)
            {
                Child.dbTotaalPrijs = value;
                RaisePropertyChanged("totaalPrijs");
            }
        }
    }

    private bool _isChecked;
    public bool IsChecked
    {
        get { return _isChecked; }
        set
        {
            if (_isChecked != value)
            {
                _isChecked = value;
                RaisePropertyChanged("IsChecked");
            }
        }
    }

}
这是我的ItemViewModel

namespace Treeview_test1.ViewModel
{
public class ItemViewModel : ViewModelBase
{
    public ItemViewModel()
    {
        calcVMColl = new ObservableCollection<CalculationViewModel>();
        foreach (TableItemChildren calc in Service.getItemCalculations("1"))
        {
            calcVMColl.Add(new CalculationViewModel(calc));
        }
    }

    // Switch between real and mock data
    private IGetCalculations _service;
    public IGetCalculations Service
    {
        get
        {
            if (_service == null)
            {
                if (IsInDesignMode)
                    _service = new MockCalculations();
                else
                    _service = new GetCalculations();
            }
            return _service;
        }
        set
        {
            _service = value;
        }
    }

    private ObservableCollection<CalculationViewModel> _calcVMColl;
    public ObservableCollection<CalculationViewModel> calcVMColl
    {
        get { return _calcVMColl; }
        set
        {
            if (calcVMColl != value)
            {
                _calcVMColl = value;
                RaisePropertyChanged("calcVMColl");
            }
        }
    }
}
namespace Treeview\u test1.ViewModel
{
公共类ItemViewModel:ViewModelBase
{
公共项目视图模型()
{
calcVMColl=新的ObservableCollection();
foreach(TableItemChildren计算在服务中。getItemCalculations(“1”))
{
添加(新的CalculationViewModel(calc));
}
}
//在真实数据和模拟数据之间切换
私人IGetCalculations_服务;
公共电子计算服务
{
得到
{
if(_service==null)
{
如果(IsInDesignMode)
_服务=新的模拟计算();
其他的
_服务=新的GetCalculations();
}
退货服务;
}
设置
{
_服务=价值;
}
}
私人可观测收集(calcVMColl);;
公共可观测收集calcVMColl
{
获取{return\u calcVMColl;}
设置
{
如果(calcVMColl!=值)
{
_calcVMColl=数值;
RaisePropertyChanged(“calcVMColl”);
}
}
}
}
和XAML

<Window x:Class="Treeview_test1.MainWindow" xmlns="http://schemas.microsoft.com/   winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525" xmlns:ViewModel="clr-namespace:Treeview_test1.ViewModel">
<Window.DataContext>
    <ViewModel:ItemViewModel />
</Window.DataContext>
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="204" />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <TreeView x:Name="tree" Width="195" HorizontalAlignment="Left" ItemsSource="{Binding calcVMColl}" Background="LightGray" Grid.Column="0" RenderTransformOrigin="1.016,0.509">
        <TreeView.ItemContainerStyle>
            <Style TargetType="{x:Type TreeViewItem}">
                <Setter Property="IsSelected" Value="{Binding IsChecked, Mode=TwoWay}" />
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="FontSize" Value="10" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </TreeView.ItemContainerStyle>
        <TreeView.Resources>
            <DataTemplate DataType="{x:Type ViewModel:CalculationViewModel}">
                <Label Content="{Binding totaalPrijs}" />
            </DataTemplate>
        </TreeView.Resources>
    </TreeView>
    <Label Grid.Column="1" HorizontalAlignment="Left" Margin="39,39,0,0" VerticalAlignment="Top" Content="{Binding....?}" Foreground="Black" FontFamily="segeo ui" FontSize="20" />
</Grid>

简而言之:如何将标签文本绑定到当前选定的treeview项

提前谢谢


Addy

树视图的
SelectedItem
绑定到
标签(或
文本块
)相当简单:

<TreeView Name="myTreeview"/>
<TextBlock Text="{Binding SelectedItem, ElementName=myTreeview, Mode=OneWay}"/>
然后,
TextBlock
上的绑定将如下所示:

<TextBlock Text="{Binding SelectedItem, Converter={StaticResource GetTextFromItemConverter}, ElementName=myTreeview, Mode=OneWay}"/>

<TextBlock Text="{Binding SelectedItem, Converter={StaticResource GetTextFromItemConverter}, ElementName=myTreeview, Mode=OneWay}"/>