Как связать перечисление в выпадающий список внутри шаблона данных - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть enum , который мне нужен для привязки в ComboBox .ComboBox находится внутри тега шаблона данных .Как я могу связать перечисление в ComboBox?

Это перечисление:

 public enum Status
{
    Enable,
    Disable
}

Это xaml:

<Window.Resources>
    <cv:StatusToBooleanConverter x:Key="statusToBooleanConverter"/>
    <ObjectDataProvider x:Key="dataFromEnum" MethodName="GetValues" ObjectType="{x:Type sys:Enum}">
        <ObjectDataProvider.MethodParameters>
            <x:Type TypeName="enum:Status"/>
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>
</Window.Resources>
<DataTemplate>
  <StackPanel>
     <ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type DataGrid}}, 
     Path=DataContext.Statusstring}" x:Name="cbProductionLineStatus" 
     FlowDirection="LeftToRight" FontSize="16" Foreground="MidnightBlue" 
     HorizontalAlignment="Stretch" VerticalAlignment="Center"/>
   </StackPanel>    
</DataTemplate>

Вот код модели представления:

public List<Status> status;

    public List<Status> Statusstring
    {
        get
        {
            foreach (List<Status> iColor in System.Enum.GetValues(typeof(Status)))
            {
                status =  iColor;
            }

            return status;
        }
    }

Я попытался реализовать метод Find ancestor на полпути и застрял.

<ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type DataGrid}},
                                Path=?}" SelectedValue="{Binding ProductionLineStatus,Mode=TwoWay}" SelectedValuePath="ProductionLineStatus" DisplayMemberPath="ProductionLineStatus" x:Name="cbProductionLineStatus" FlowDirection="LeftToRight" FontSize="16" Foreground="MidnightBlue" 
                                HorizontalAlignment="Stretch" VerticalAlignment="Center" />

Я пытаюсь заполнить статус перечисления в моем комбинированном ящике, но это не удается.Однако сейчас я пытаюсь реализовать решение, заявленное Стивеном, но оно все еще не работает.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Я смог решить эту проблему, реализовав модель представления следующим образом:

public Status status = Status.Enable;

    public List<string> Statusstring {
        get
        {
            return System.Enum.GetNames(typeof(Status)).ToList();

        }

    }

Это мой xaml:

 <ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type DataGrid}},
                                Path=DataContext.Statusstring}" SelectedValue="{Binding ProductionLineStatus, Converter={StaticResource statusToBooleanConverter}, Mode=TwoWay}" x:Name="cbProductionLineStatus" FlowDirection="LeftToRight" FontSize="16" Foreground="MidnightBlue" 
                                HorizontalAlignment="Stretch" VerticalAlignment="Center"/>
0 голосов
/ 14 сентября 2018

Я думаю, что решил бы это, написав свойство и используя это свойство в Combobox:

Что-то похожее на это:

public Status status = Status.Enable;

public string Statusstring
{
    get
    {
        if (status == Status.Enable)
            return "Enable";
        else
            return "Disable";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...