Существует ListBox
ThreadBox
.
ThreadBox:
<ListBox x:Name="ThreadBox" SelectionChanged="ThreadBox_SelectionChanged" Grid.Column="1" ItemsSource="{Binding MThreadPV}" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="2">
<CheckBox IsChecked="{Binding Path=Check}"></CheckBox>
<TextBlock FontSize="16" HorizontalAlignment="Center">
<Hyperlink TextDecorations="" NavigateUri="{Binding Path=Url}" Foreground="White" RequestNavigate="Hyperlink_RequestNavigate"><TextBlock FontSize="16" Text="{Binding Path=Thread}" HorizontalAlignment="Center"/></Hyperlink>
</TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
DataTemplate
привязано к классу CheckedItem
CheckedItem:
public class CheckedItem
{
private string thread;
private string url;
private bool check;
private int id;
public int ID
{
get { return id; }
set { id = value; }
}
public bool Check
{
get { return check; }
set { check = value; }
}
public string Thread
{
get { return thread; }
set
{
thread = value;
}
}
public string Url
{
get { return url; }
set
{
url = value;
}
}
}
Попытка привязать ObservableCollection<CheckedItem>
к ThreadBox
с помощью MVVM.
Я использовал руководство из RUS , но что-то пошло не так.
Модель :
class ThreadBoxModel : BindableBase
{
private readonly ObservableCollection<source.CheckedItem> _myValues = new ObservableCollection<source.CheckedItem>();
public readonly ReadOnlyObservableCollection<source.CheckedItem> MThreadValues;
public ThreadBoxModel()
{
MThreadValues = new ReadOnlyObservableCollection<source.CheckedItem>(_myValues);
}
public void AddValue(source.CheckedItem item)
{
_myValues.Add(item);
RaisePropertyChanged("T_Sum");
}
public void RemoveValue(int index)
{
if (index >= 0 && index < _myValues.Count) _myValues.RemoveAt(index);
RaisePropertyChanged("T_Sum");
}
public int T_Sum => MThreadValues.Count;
}
VM :
public class MyThreadsVM : BindableBase
{
readonly source.models.ThreadBoxModel _model = new source.models.ThreadBoxModel();
public MyThreadsVM()
{
_model.PropertyChanged += (s, e) => { RaisePropertyChanged(e.PropertyName); };
AddCommand = new DelegateCommand<source.CheckedItem>(str => {
_model.AddValue(str);
});
RemoveCommand = new DelegateCommand<int?>(i => {
if (i.HasValue) _model.RemoveValue(i.Value);
});
}
public DelegateCommand<source.CheckedItem> AddCommand { get; }
public DelegateCommand<int?> RemoveCommand { get; }
public int T_Sum => _model.T_Sum;
public ReadOnlyObservableCollection<source.CheckedItem> MThreadPV => _model.MThreadValues;
}
Я использую ModernWindow
и из-за этого:
<mui:ModernWindow.DataContext>
<local:MyThreadsVM/>
</mui:ModernWindow.DataContext>
Добавление элементов :
private void ThreadBox_Update()
{
if (source.StaticData.cookies != null)
{
List<List<Dictionary<string, string>>> data = this.dark.GetMyThreads();
int iterator = 0;
source.models.ThreadBoxModel model = new source.models.ThreadBoxModel();
foreach (var list in data)
{
string url = list[0]["url"];
model.AddValue(new source.CheckedItem { Thread = list[0]["thread"], Url = $"{source.StaticData.head_url}{url}", ID = iterator, Check = false });
iterator++;
}
}
}
ThreadBox
не обновляется.
В чем может быть проблема?