已编辑我删除了Name和Result集合,只是简单地绑定了AllResults属性。但是,我在那里看不到任何真正的价值,只有符合我应该看到的值数量的条目,但内容不存在。
我有以下XAML。
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Margin="5" HorizontalAlignment="Center" Grid.Row="0">SomeTextHere</TextBlock>
<ListView Grid.Row="1" ItemsSource="{Binding Path=AllResults}></ListView>
</Grid>
以下ViewModel
public class MyViewModel : INotifyPropertyChanged
{
#region Properties
private ObservableCollection<Results> _AllResults;
public ObservableCollection<Results> AllResults
{
get
{
return _AllResults;
}
set
{
_AllResults = value;
NotifyPropertyChanged("Results");
}
}
#endregion
#region PropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
#endregion
}
}
ViewModel由一个设置AllResults变量的实例调用:
MyViewModel myViewModel = PaneResultsControl.MyViewModelInstance; // Return the instance of the ViewModel.
myViewModel.AllResults = results;
我的逻辑失败了什么阻止我填充结果和名称列表?如果我传递其他值,如单个字符串并尝试绑定到TextBlock,它就像一个魅力,但我无法尝试填写GridView。
有什么想法吗?
答案 0 :(得分:1)
通常,您需要设置ItemsSource
的{{1}}属性,以便知道从何处获取数据:
ListView
但是,您已经完成了另外一个非常奇怪的步骤,即尝试将主要集合分解为两个单独的集合(<ListView Grid.Row="1" ItemsSource="{Binding AllResults}">
...
和Name
),然后您似乎尝试将模板绑定到那些。这才刚刚起作用。一旦进入数据模板,数据上下文就会切换到绑定对象,所以即使您有权访问Result
和Name
(可能获得),它们仍然只是集合,而不是单个部分你想要的数据。
Result
只能有一种来源,一种类型的对象。如果您需要转换数据以进行显示,请考虑直接绑定到ItemsControl
类上的属性并使用转换器或计算属性,而不是打破您的集合
答案 1 :(得分:1)
更改通知内置于ObservableCollection中,因此您可以取消创建新集合和属性更改通知。
public ObservableCollection<string> Name { get; set; }
public ObservableCollection<string> Result { get; set; }
private List<Results> _AllResults;
public List<Results> AllResults
{
get
{
return _AllResults;
}
set
{
_AllResults = value;
Name.Clear();
Result.Clear();
foreach (Results results in _AllResults)
{
Name.Add(results.Name);
Result.Add(results.Succeed ? "Pass" : "Fail");
}
}
}
此外,您的列表视图没有DataSource,您可能希望将ItemsSource设置为viewmodel上的ObservableCollection。这个集合可能应该由另一个类组成。
public ObservableCollection<Result> Results { get; set; }
public class Result
{
public string Name { get; set; }
public string Result{ get; set; }
}
<ListView Grid.Row="1" ItemsSource={Binding Path=Results}>...