DataTemplateSelector와 함께 datatemplates를 사용하려고합니다. 프로그램이 실행되는 동안 가지고있는 2 개의 템플릿 중 1 개를 선택하고 싶습니다.DataTemplateSelector ListView에 항목을 추가하지 마십시오.
그래서 나는이 간단한 템플릿이 있습니다
<DataTemplate x:Key="User_Text_Message">
<StackPanel>
<TextBlock Text="{Binding UsCom}" Foreground="Black"/>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="Anastasia_Text_Message">
<StackPanel>
<TextBlock Text="{Binding Answer}" Foreground="Yellow"/>
</StackPanel>
</DataTemplate>
<t:MessagesAdd
User_Text_Message="{StaticResource User_Text_Message}"
Anastasia_Text_Message="{StaticResource Anastasia_Text_Message}"
x:Key="MessAdd"/>
class MessagesAdd : DataTemplateSelector
{
public DataTemplate Anastasia_Text_Message { get; set; }
public DataTemplate User_Text_Message { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
switch(MainLogic.MainVars.TemplateType)
{
case 1:
var g = new UserTextCommand() { UsCom = MainLogic.MainVars.UserCommand };
MainWindow.Instance.MainChat.Items.Add(g);
return User_Text_Message;
case 2:
var a = new AnastasiaTextAnswer() { Answer = MainLogic.MainVars.AnastasiaAnswer };
MainWindow.Instance.MainChat.Items.Add(a);
return Anastasia_Text_Message;
default:
return null;
}
}
}
class UserTextCommand
{
public string UsCom { get; set; }
}
class AnastasiaTextAnswer
{
public string Answer { get; set; }
}
가 그럼 난 "안녕하세요"를 입력하고
public void AnswersADD()
{
MainLogic.MainVars.TemplateType = 1;
add.SelectTemplate(null, null);
MainLogic.MainVars.TemplateType = 2;
add.SelectTemplate(null, null);
}
SendButton을 클릭
<ListView x:Name="MainChat" Height="330" Background="{x:Null}"
Margin="10,25,0,10" HorizontalAlignment="Left"
Width="680" Foreground="White" ItemTemplateSelector="{StaticResource MessAdd}"
ItemsSource="{Binding MessagesAdd}">
</ListView>
그리고 코드 목록보기
그리고 내가 가지고있는 것. 내 메시지가없고 오직 많은 답이 있습니다.
캔트 내가 무엇을해야하는지 잘 알고 있습니다.
지금 내가 할 그
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
ObservableCollection<AnswersLogic.AnastasiaTextAnswer> answer = new ObservableCollection<AnswersLogic.AnastasiaTextAnswer>();
ObservableCollection<AnswersLogic.UserTextCommand> usercom = new ObservableCollection<AnswersLogic.UserTextCommand>();
if (item is UserTextCommand)
{
usercom.Add(new UserTextCommand() { UsCom = MainLogic.MainVars.UserCommand});
MainWindow.Instance.MainChat.ItemsSource = usercom;
return User_Text_Message;
}
else if (item is AnastasiaTextAnswer)
{
answer.Add(new AnastasiaTextAnswer() { Answer = MainLogic.MainVars.AnastasiaAnswer });
MainWindow.Instance.MainChat.ItemsSource = answer;
return Anastasia_Text_Message;
}
else
{
return null;
}
}
}
하지만
MainWindow.Instance.MainChat.ItemsSource = usercom;
및
MainWindow.Instance.MainChat.ItemsSource = answer;
오류 또는 메시지가 있습니까? 또한 switch 문 바로 앞에 중단 점을 넣으면 어떻게됩니까? 네가 한걸음 나아 간다면 너는 기대 한대로 할 수 있니? – Joe
DataTemplateSelector는 항목이 사용 된 ItemsSource에 항목을 추가하기위한 것이 아닙니다. 'MainWindow.Instance.MainChat.Items.Add (...)'를 호출하지 마십시오. – Clemens
MainWindow.Instance.MainChat.Items.Add (...)를 호출하지 않으면 아무 일도 일어나지 않습니다. –