WPF - 绑定祖先两个不同的视图

时间:2013-01-29 09:14:19

标签: c# wpf mvvm

我有四个观点,第一个是Window,其中包含ComboBox,对于我ComboBox中的每个项目,我有三种不同类型,所以我只做了三种不同的观点每种类型物品的小视图。

我的问题是,我无法将我的文本值与主视图中的祖先当前项绑定。当我尝试绑定列表/ CurrentItem时,程序崩溃。

主视图中的列表:

<GroupBox Margin="5,5,10,5" Grid.Column="1" Header="MyListOfTypes" Name="MyListOfTypes">
            <ListBox ItemsSource="{Binding Path=MyListOfTypes}" SelectedItem="{Binding Path=SelectedType}" />
        </GroupBox>

我在小视图中的文本框:

<UserControl x:Class="Editeur.View.BaliseFixView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
             mc:Ignorable="d" 
             d:DesignHeight="28" d:DesignWidth="240">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="3*" />
        </Grid.ColumnDefinitions>
        <Label Content="Fix :" />
        <TextBox Width="170px" Grid.Column="1" Name="fixValue" Text="{Binding Source={StaticResource Locator}, Path=Balise.MyListOfTypes/}"/>
    </Grid>
</UserControl>

定位器:

public class ViewModelLocator
    {
        public ViewModelLocator()
        {
            ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

            SimpleIoc.Default.Register<BaliseViewModel>();
        }

        public BaliseViewModel Balise
        {
            get
            {
                return ServiceLocator.Current.GetInstance<BaliseViewModel>();
            }
        }
    }

通过添加属性修复:

public string Valeur
{
    get
    {
        return _valeur;
    }
    set
    {
        Set(() => Valeur, ref _valeur, value);
    }
}

一个功能

public void RemplirDicoVars(XDocument document)
{
    ApercuValeurs = (
        from p in document.Descendants("apercu")
        select new
        {
            Key = (string)(p.Attribute("var")),
            Value = (string)(p.Attribute("value"))
        }).ToDictionary(pair => pair.Key, pair => pair.Value);
}

XAML:

<TextBox Width="170px" Grid.Column="1" Name="fixValue" Text="{Binding Path=Valeur}" />

0 个答案:

没有答案