我有一个MVVM WPF项目,我有一个devexpress手风琴控件,其中填充了来自ViewModel的xml模板项。这很好,但我的问题是当我点击手风琴控件中的一个项目并触发selectedIndexChanged事件。我想以MVVM方式处理它并从accordian控件获取所选项值(这是xml文件的路径),获取xml文件的内容并使用xml文件的内容对文本框控件进行数据绑定。以下是我到目前为止所尝试的内容。
这是我的xaml用户控件
<dxa:AccordionControl Grid.Column="0" x:Name="accordianTemplateMenu"
SelectionMode="Single" SelectionUnit="SubItemOrRootItem" ItemsSource="
{Binding TemplateItems}"
ChildrenPath="TemplateItems" DisplayMemberPath="Header >
<dxmvvm:Interaction.Behaviors>
<dxmvvm:EventToCommand EventName="SelectedItemChanged" Command="
{Binding EditCommand}">
<dxmvvm:EventToCommand.EventArgsConverter>
<Common:AccordionEventArgsConverter/>
</dxmvvm:EventToCommand.EventArgsConverter>
</dxmvvm:EventToCommand>
</dxmvvm:Interaction.Behaviors>
</dxa:AccordionControl>
<GridSplitter Grid.Column="1" />
<TextBlock Grid.Column="2" x:Name="templateItemContainer">
<Run Name="run" Text="{Binding XML}" ></Run>
</TextBlock>
这归结为AccordionEventArgsConverter
,它从手风琴控件中的selecteditem获取事件参数:
public class AccordionEventArgsConverter :
EventArgsConverterBase<AccordionSelectedItemChangedEventArgs>
{
protected override object Convert(object sender,
AccordionSelectedItemChangedEventArgs args)
{
if (args != null)
{
return args;
}
return null;
}
}
最后我的viewmodel:
class TemplateMenuViewModel
{
private List<TemplateItem> _templateItems;
public TemplateMenuViewModel()
{
EditCommand = new DelegateCommand<object>(Edit, CanEdit);
}
public List<TemplateItem> TemplateItems
{
get
{
TemplateProvider provider = new TemplateProvider();
return provider.GetTemplateMenuItems("pathToMenuItems");
}
set { _templateItems = value; }
}
public ICommand<object> EditCommand { get; private set; }
public void Edit(object accordianItemArgs)
{
}
public bool CanEdit(object accordianItemArgs)
{
return accordianItemArgs != null;
}
}
我可以进入public void Edit
方法,这很棒,因为从那里我可以使用accordianItemArgs
获取xml内容,但我如何&#34;返回&#34; /将xml内容数据绑定到xaml文件中的textblock元素?
答案 0 :(得分:1)
有几件事:
INotifyPropertyChanged
接口。它看起来不像你那样做,然后在设置XML文本时引发属性更改事件。您应该使用OneWay模式设置Text="{Binding XML}"
:
Text =“{Binding XML,Mode = OneWay}”
如果您需要有关如何实施INotifyPropertyChanged
的更多信息,请查看本教程:https://www.tutorialspoint.com/mvvm/mvvm_first_application.htm。