我是C#/ xaml的初学者,我不了解绑定中的所有内容,尤其是在有必要通知或不刷新视图的情况下。
在我的代码中,我使用XML和XElement存储数据。 xml包含一个项目列表(属性),每个项目包含两个列表(videoStreams和audioStreams)。
当我添加(或删除)一部视频时,视图不会刷新。如果我添加(或删除)一个音频后,则视图将被引用。视频和音频列表已更新。 如果在xaml代码中我反转了音频和视频列表,则问题出在音频上。
您对这个问题有任何想法吗?
我的XML(摘录)
<Root>
<Properties name="Node">
<videoNode exclude="false">
<rate minFrameRate="" maxFrameRate="" />
</videoNode>
<audioNode >
<bitrateRange min="" max="" />
</audioNode>
</Properties>
xaml
<ListBox Name="multiMaster" ItemsSource ="{Binding Elements[Properties]}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<ListBox Name="videoStreams" ItemsSource="{Binding Elements[videoNode]}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel x:Name="stackVideo" Orientation="Vertical">
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<ListBox Name="audioStreams" ItemsSource="{Binding Elements[audioNode]}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel x:Name="stackAudio" Orientation="Vertical">
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
和添加功能
foreach (XElement childElement in oMMPNode.Descendants("Properties"))
{
if (childElement.Attribute("id").Value == profileId)
{
XElement newVideo = new XElement("videoNode");
childElement.Add(newVideo);
break;
}
}
答案 0 :(得分:0)
是的,有必要通知。您需要将XML数据映射到一组ViewModels
。它们应该实现INotifyPropertyChanged
,并在值更改时引发相应的事件,等等。
因此,您将使用Xp代替XElement:
public class XElementViewModel:INotifyPropertyChanged
{
public XElementViewModel(XElement data)
{
// initialize properties
}
...
// here you define all needed properties of XElement that you want to expose
}