В моем приложении я использую usercontrol, называемый «ChannelControls», который я экземпляр 6 раз, на главном окнах.
public partial class ChannelControls : UserControl
{
CMiXData cmixdata = CMiXData.Instance;
public ChannelControls()
{
InitializeComponent();
this.DataContext = this;
}
public static readonly DependencyProperty ChannelSpriteCountProperty =
DependencyProperty.Register("ChannelSpriteCount", typeof(string), typeof(ChannelControls), new PropertyMetadata("1"));
[Bindable(true)]
public string ChannelSpriteCount
{
get { return (string)this.GetValue(ChannelSpriteCountProperty); }
set { this.SetValue(ChannelSpriteCountProperty, value); }
}
Я использую специальный класс ccmixdata для хранения всех данных для моего приложения (он будет содержать разные свойства с List строки, double и т. д.). [F8] будет содержать множество слайдеров, кнопок и других пользовательских элементов управления, но в данный момент я пытаюсь связать только один из них.
Вот одна часть этого пользовательского класса, который будет хранить данные, у него есть частный конструктор, так как мне нужно получить доступ к нему из любого места:
[Serializable]
public class CMiXData : INotifyPropertyChanged
{
private static CMiXData _instance = null;
public static CMiXData Instance
{
get
{
if (_instance == null)
{
_instance = new CMiXData();
}
return _instance;
}
}
private CMiXData() { } //prevent instantiation from outside the class
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
MessageBox.Show(propertyName);
}
private List<string> _SpriteCount = new List<string>(new string[] {"1", "1", "1", "1", "1", "1"});
public List<string> SpriteCount
{
get { return _SpriteCount; }
set
{
if(_SpriteCount != value)
{
_SpriteCount = value;
RaisePropertyChanged("SpriteCount");
}
}
}
И вот как я Я пытаюсь связать свойство channelcontrol ChannelSpriteCount с моим одноэлементным классом: cmixdata.
<CMiX:ChannelControls x:Name="Layer0" Tag="0" Visibility="Visible" ChannelSpriteCount="{Binding SpriteCount[0], Mode=TwoWay}"/>
В основном пользовательском контроле, который установлен ChannelControls, datacontext установлен следующим образом: [ ! d4]
public partial class CMiX_UI : UserControl
{
BeatSystem beatsystem = new BeatSystem();
CMiXData cmixdata = CMiXData.Instance;
public CMiX_UI()
{
InitializeComponent();
this.DataContext = cmixdata;
}
И на стороне xaml:
<UserControl
x:Class="CMiX.CMiX_UI"
DataContext="{x:Static CMiX:CMiXData.Instance}"
Но по какой-то причине свойство cmixdata не обновляется и всегда имеет значение по умолчанию ...